В Scala как удалить дубликаты из списка?



предположим, что у меня есть



val dirty = List("a", "b", "a", "c")


есть ли операция списка, которая возвращает "a", "b", "c"

551   6  

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 интерфейс.

Инар.отличный foreach println _

алгоритмический способ...

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

    Ничего не найдено.