Scala检查列表中是否存在元素

时间:2013-01-10 21:30:09

标签: string list scala find

我需要检查列表中是否存在字符串,并调用一个相应接受布尔值的函数。

是否可以通过一个衬垫实现这一目标?

以下代码是我能得到的最佳代码:

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

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

我确信用较少的编码可以做到这一点,但我不知道怎么做!

6 个答案:

答案 0 :(得分:101)

只需使用contains

即可
myFunction(strings.contains(myString))

答案 1 :(得分:29)

如果你不想使用严格的相等,你可以使用exists:


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

答案 2 :(得分:7)

更容易!

strings contains myString

答案 3 :(得分:2)

这也适用于不同的谓词

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

答案 4 :(得分:2)

在您的情况下,我会考虑使用Set而不是List,以确保您只有唯一值。除非您有时需要包含重复项。

在这种情况下,您不需要在列表周围添加任何包装函数。

答案 5 :(得分:-1)

您还可以使用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)
  }
}