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
现在可以调用而无需转换为Set
or 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 " "
}