Я довольно новичок в scala и программировании вообще (просто для удовольствия), и я пытаюсь понять хвостовую рекурсию и коллекции, но отладка действительно сложна.Scala tail recursion пересекается между 2 списками
Я 2 списка:
val quoters = List[Map[String,List[String]]]
val quoted = List[Map[String,List[String]]]
например:
val quoters = List(Map("author1"->List("1","7","8")),Map("author2"->List("2","4","6","3")),Map("author3"->List("5","2","1","3")))
val quoted = List(Map("author1"->List("5","6")),Map("author2"->List("5","8","1")),Map("author3"->List("4")))
"quoters" цитата "цитирует" и "цитировали" также цитируют "quoters".
В примере:
author1 quoted author2 with "1" and "8",
author2 quoted author3 with "4",
author3 quoted author1 with "5" & author2 with "5" + "1"
Я хочу найти круги «quoters», что цитата «цитирует», что цитата «quoters» ...
выход должен быть что-то вроде :
val quotesCircle = List(
Map("quoter"->"author1","receiver"->"author2","quote"->"4"),
Map("quoter"->"author2","receiver"->"author3","quote"->"2"),
Map("quoter"->"author3","receiver"->"author1","quote"->"1")
)
Мои проблемы:
1/Я думаю, что я злоупотребляя коллекции (это, кажется, слишком много JSon как ...)
2/я могу получить пересечение только с Список списков с:
def getintersect(q1:List[List[String]],q2:List[List[String]])={
for(x<-q1;r<-q2; if (x intersect r) != Nil)yield x intersect r
}
, но не с структура списка карт.
3/Я попытался это для рекурсии, но это не работает, потому что ... ну я не знаю:
def getintersect(q1:List[List[String]],q2:List[List[String]])= {
def getQuotedFromIntersect(quoteMatching:List[String],quoted:List[List[String]]):List[List[String]]={
for(x<-q1;r<-q2; if (x intersect r) != Nil)
getQuotedFromIntersect(x intersect r,quoted)
}
}
Я надеюсь, что я достаточно ясно:/
Спасибо заранее !
Felix
Привет, Джордж, спасибо. Я застрял в своей структуре данных (ваш гораздо чище ...) и да, я должен пойти для ориентированного графа. Гораздо проще! – user2648879