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