development

Scala에서 List에서 고유 한 항목을 찾는 방법

big-blog 2020. 10. 15. 08:04
반응형

Scala에서 List에서 고유 한 항목을 찾는 방법


Scala에서 List에서 고유 한 항목을 찾는 방법은 무엇입니까?


이를 수행하는 가장 효율적인 순서 보존 방법은 Set보조 데이터 구조로 를 사용하는 것입니다 .

def unique[A](ls: List[A]) = {
  def loop(set: Set[A], ls: List[A]): List[A] = ls match {
    case hd :: tail if set contains hd => loop(set, tail)
    case hd :: tail => hd :: loop(set + hd, tail)
    case Nil => Nil
  }

  loop(Set(), ls)
}

암시 적 변환을 사용하여 더 멋진 구문으로이를 래핑 할 수 있습니다.

implicit def listToSyntax[A](ls: List[A]) = new {
  def unique = unique(ls)
}

List(1, 1, 2, 3, 4, 5, 4).unique    // => List(1, 2, 3, 4, 5)

2.8에서는 다음과 같습니다.

List(1,2,3,2,1).distinct  // => List(1, 2, 3)

주문 유지 기능으로 고유 한 고유 필터를 사용하세요.

scala> val l = List(1,2,3,3,4,6,5,6)
l: List[Int] = List(1, 2, 3, 3, 4, 6, 5, 6)

scala> l.foldLeft(Nil: List[Int]) {(acc, next) => if (acc contains next) acc else next :: acc }.reverse
res0: List[Int] = List(1, 2, 3, 4, 6, 5)

Rosetta 코드 : 고유 요소 시퀀스 생성 을 참조하는 경우

val list = List(1,2,3,4,2,3,4,99)
val l2 = list.removeDuplicates
// l2: scala.List[scala.Int] = List(1,2,3,4,99)

이후 List불변, 당신은 초기 수정 실 거예요 List호출하여removeDuplicates

경고 : 이 트윗 (!)에서 언급했듯이 이것은 순서를 유지하지 않습니다.

scala> val list = List(2,1,2,4,2,9,3)
list: List[Int] = List(2, 1, 2, 4, 2, 9, 3)

scala> val l2 = list.removeDuplicates
l2: List[Int] = List(1, 4, 2, 9, 3)

의 경우 티켓 929Seq 에 따라 Scala2.8에서 해당 메서드를 사용할 수 있어야합니다 . 그 동안 여기에 표시된 것과 같이 임시 정적 메서드를 정의해야합니다 .


Imho, 질문의 모든 해석은 거짓입니다.

Scala에서 List에서 고유 한 항목을 찾는 방법은 무엇입니까?

이 목록이 주어지면 :

val ili = List (1, 2, 3, 4, 4, 3, 1, 1, 4, 1) 

목록에서 유일한 고유 항목은 2입니다. 다른 항목은 고유하지 않습니다.

ili.toSet.filter (i => ili.indexOf (i) == ili.lastIndexOf (i))

찾을 것입니다.


list.filter { x => list.count(_ == x) == 1 }

간단한 임시 방법은 List를 Set에 추가하고 거기에서 사용하는 것입니다.

  val l = List(1,2,3,3,3,4,5,5,6,7,8,8,8,9,9)
  val s = Set() ++ x
  println(s)

생성 :

> Set(5, 1, 6, 9, 2, 7, 3, 8, 4)

이것은 Seq (또는 모든 Iterable)에서 작동하지만 2.8에서는 필요하지 않습니다. 여기서 removeDuplicates 메소드가 더 읽기 쉽습니다. 또한 런타임 성능과보다 신중한 변환에 대해 확실하지 않습니다.

또한 분실 된 주문에 유의하십시오.


정의에 의해 설정에는 고유 한 요소 만 포함되어 있으므로 list.toSet이이를 수행합니다.

참고URL : https://stackoverflow.com/questions/1538598/how-in-scala-to-find-unique-items-in-list

반응형