내가 가지고 있다고 가정
val dirty = List("a", "b", "a", "c")
"a", "b", "c"를 반환하는 목록 작업이 있습니까?
내가 가지고 있다고 가정
val dirty = List("a", "b", "a", "c")
"a", "b", "c"를 반환하는 목록 작업이 있습니까?
답변:
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
또는 로 변환하지 않고도 호출 이 가능합니다 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 " "
}