Programing

스칼라는 요소가 목록에 있는지 확인합니다.

lottogame 2020. 10. 24. 09:22
반응형

스칼라는 요소가 목록에 있는지 확인합니다.


목록에 문자열이 있는지 확인하고 그에 따라 부울을 받아들이는 함수를 호출해야합니다.

하나의 라이너로 이것을 달성 할 수 있습니까?

아래 코드는 내가 얻을 수있는 최선의 방법입니다.

val strings = List("a", "b", "c")
val myString = "a"

strings.find(x=>x == myString) match {
  case Some(_) => myFunction(true)
  case None => myFunction(false)
}

적은 코딩으로 이것을 할 수 있다고 확신하지만 방법을 모르겠습니다!


그냥 사용 contains

myFunction(strings.contains(myString))

그리고 엄격한 평등을 사용하고 싶지 않다면 exist를 사용할 수 있습니다.


myFunction(strings.exists { x => customPredicate(x) })

더 쉽습니다!

strings contains myString

이것은 다른 술어에서도 작동합니다.

myFunction(strings.find( _ == mystring ).isDefined)

귀하의 경우에는 고유 한 값 만 가지도록 목록이 아닌 세트를 사용하는 것을 고려할 것입니다. 때때로 중복을 포함 할 필요가없는 한.

이 경우 목록 주위에 래퍼 함수를 ​​추가 할 필요가 없습니다.


를 사용하여 contains메서드를 구현할 수도 있습니다 foldLeft. 매우 훌륭합니다. 저는 foldLeft 알고리즘을 좋아합니다.

예를 들면 :

object ContainsWithFoldLeft extends App {

  val list = (0 to 10).toList
  println(contains(list, 10)) //true
  println(contains(list, 11)) //false

  def contains[A](list: List[A], item: A): Boolean = {
    list.foldLeft(false)((r, c) => c.equals(item) || r)
  }
}

참고 URL : https://stackoverflow.com/questions/14267612/scala-check-if-element-is-present-in-a-list

반응형