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


86

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

用一个衬板就能做到这一点吗?

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

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

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

我敢肯定,用更少的编码就可以做到这一点,但是我不知道怎么做!

Answers:



32

而且,如果您不想使用严格的相等性,则可以使用存在:


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

14

更轻松!

strings contains myString

4
与接受的答案有何不同?
Alper t。Turker

2
它在根本上是相同的,但不同之处在于:1.括号少2.周期少3.不引用myFunction 4.留出更多空白。总体; 我的答案= 25个字符,接受的答案= 38个字符
Taylrl

这是一个花言巧语的问题;)为了给您一个背景,我是从LQP那里得到的。我不建议删除,但是如果您发布较晚的答案,请尝试提供一些附加值。您知道,它有点语法糖的味道。只是说...
Alper t。Turker

3
没问题。我明白。我认为通过增加简单性确实增加了价值。无论如何还是要谢谢:)
Taylrl

3

这也应与其他谓词一起使用

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

3
你可以只使用存在,而不必使用查找与isDefined结合
Ciaran0

2

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

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


-3

您也可以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)
  }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.