99

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

是否有可能用一个衬垫来实现这一目标?

下面的代码是我能得到的最好的:

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

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

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

4

6 回答 6

137

只需使用contains

myFunction(strings.contains(myString))
于 2013-01-10T21:31:22.787 回答
35

如果你不想使用严格相等,你可以使用存在:


myFunction(strings.exists { x => customPredicate(x) })
于 2013-01-10T22:32:14.713 回答
19

更容易!

strings contains myString
于 2018-01-22T11:57:59.527 回答
3

这也适用于不同的谓词

myFunction(strings.find( _ == mystring ).isDefined)
于 2015-07-20T14:38:29.960 回答
2

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

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

于 2015-10-04T08:45:20.943 回答
-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)
  }
}
于 2019-02-06T09:16:34.937 回答