Answers:
看看ScalaDoc for Seq,
scala> dirty.distinct
res0: List[java.lang.String] = List(a, b, c)
更新。其他人建议使用Set而不是List。很好,但是请注意,默认情况下,该Set接口不保留元素顺序。您可能需要使用一组实施,明确并维持秩序,如collection.mutable.LinkedHashSet。
Map[String, File],其中的键是目标文件名的一部分。构建完地图后,您可以调用values方法以获取Iterable值-各个键在构造上都是不同的。
groupBy成员来执行此操作scala.collection.Iterable[A]。
scala.collection.immutable.List现在有一种.distinct方法。
因此dirty.distinct现在可以调用而无需转换为Setor Seq。
.distinct没有为定义scala.collection.Iterable[A]。因此,在这种情况下,您必须使用升级dirty到a Seq或Set无论如何(即通过使用.toList,.toSeq或.toSet成员)才能使其正常工作。
当然,首先使用Set是正确的方法,但是:
scala> List("a", "b", "a", "c").toSet.toList
res1: List[java.lang.String] = List(a, b, c)
作品。或者正像toSet它支持顺序 Traversable 接口。
Set工具Traversable,不是Seq。区别在于Seq保证元素的顺序,而Traversable不能保证元素的顺序。
算法方式...
def dedupe(str: String): String = {
val words = { str split " " }.toList
val unique = words.foldLeft[List[String]] (Nil) {
(l, s) => {
val test = l find { _.toLowerCase == s.toLowerCase }
if (test == None) s :: l else l
}
}.reverse
unique mkString " "
}