1
列表我試圖解決一個問題上的關聯列表:編寫將輸出最大項關聯特定項目關聯配對的輸入功能。斯卡拉如何構建基於元組
示例輸入:
[[項目1,項目2], [項目2,項目3], [項目2,項目4], [項目5,項6]]
輸出:[項目1,項目2,項目3,項目4]
我試圖解決它使用Scala的乾淨和實用的風格,這是我最初的實現:
object Main {
def main(args: Array[String]) {
val m = List[(String,String)]("item1" -> "item2",
"item2" -> "item3",
"item2" -> "item4",
"item5" -> "item6")
val l: List[String] = getAssociationList(m)
l.foreach((s) => println(s))
}
def getAssociationList(l:List[(String,String)]) : List[String] = {
def f(k:String, l:List[(String,String)]) : List[String] = {
var list:List[String] = List(k)
l.filter((t:(String,String)) => t._1.equals(k)).foreach(
{case (key, value) => list = list ++ f(value, l)}
)
return list
}
f(l(0)._1, l)
}
}
它輸出正確的結果,但我使用var list:List[String] = List(k)
這顯然似乎不起作用
,有沒有改善這一功能,以使其與Scala的功能性風格的最佳做法,更清潔和更一致的方式?
你能更清楚地解釋功能?我很難理解'最大項目關聯'的含義 - 你的例子沒有意義。我在輸入中看到每個元組有一個輸出項,但沒有一致的關係。 – Tanjin
問題是要建立基於元組(字符串,字符串)的元組的第一項包含層次的根名單上的字符串列表「物品1」應該在結果列表中,物品1點ITEM2月1日,所以說到第二,item2指向item3和item4,因此item3和item4都具有相同的「rank」,item5和item6不會從源自item1的級聯層次結構中的任何其他項指向,因此它們不是結果列表的一部分。 – guilhebl
好吧,我現在明白了 - 在這種情況下,您似乎已經完成了困難的部分(製作遞歸算法)。 jwvh以'功能'格式重寫了它(具有不變性,沒有變量,也沒有副作用,並且使用過濾器和flatMap在列表上鍊接函數) – Tanjin