Scala:获取列表,其中三个列表的第一个元素不重复任何元素

时间:2017-05-27 23:37:44

标签: scala list functional-programming

我有一个带有以下元素的scala List[List[Person]]

Person(Antonio)
Person(Maria)
Person(Joao)

Person(Antonio)
Person(Susana)
Person(Laura)

Person(Maria)
Person(Manuel)
Person(Joao)
Person(Laura)

如何获取列表,其中每个列表的第一个元素不重复?像这样:

Person(Antonio)
Person(Susana)
Person(Maria)

使用var's会很容易,但我想在功能上做到这一点。

2 个答案:

答案 0 :(得分:2)

val l: List[List[Person]] = ...

l.foldLeft(List.empty[Person]) { case (acc, el) => 
  el.find(x => !acc.contains(x)).fold(acc)(acc.::)
}

答案 1 :(得分:0)

我能够通过递归和foldLeft

来实现这一目标
val allLists: List[List[Person]] = ...

allLists.foldLeft(List.empty[Person]){ case(outputList, list) =>
  def loop(innerList: List[Person], newPerson: Person): Person = {
    if(innerList.isEmpty) newPerson
    else if(!outputList.contains(innerList.head)) newPerson
    else loop(innerList.tail, innerList.tail.head)
  }

  outputList :+ loop(list, list.head)
}