6 ответов:
взгляните на ScalaDoc для Seq,
scala> dirty.distinct res0: List[java.lang.String] = List(a, b, c)обновление. Другие предложили использовать
Set, а неList. Это нормально, но имейте в виду, что по умолчанию,Setинтерфейс не сохраняет порядок элементов. Вы можете использовать реализацию набора, которая явно тут сохранить порядок, например коллекция.изменчивый.LinkedHashSet.
scala.collection.immutable.Listтеперь.distinctметод.и
dirty.distinctтеперь можно без перехода наSetилиSeq.
перед использованием решения Kitpon, подумайте об использовании
Set, а неList, это гарантирует, что каждый элемент является уникальным.как и большинство операций списка (
foreach,map,filter, ...) то же самое для наборов и списков, изменение коллекции может быть очень легко в коде.
использование набора в первую очередь является правильным способом сделать это, конечно, но:
scala> List("a", "b", "a", "c").toSet.toList res1: List[java.lang.String] = List(a, b, c)строительство. Или просто
toSetкак он поддерживаетSeqTraversableинтерфейс.
алгоритмический способ...
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 " " }
Comments