斯卡拉检查是否元素出现在名单

问题描述 投票:68回答:6

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

是否有可能有一个衬垫,以实现这一目标?

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

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

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

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

string list scala find
6个回答
106
投票

只要使用contains

myFunction(strings.contains(myString))

29
投票

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


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

8
投票

更容易!

strings contains myString

2
投票

这应该有不同的谓词也行

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

2
投票

在你的情况我会考虑使用设置,而不是列表,以确保你有唯一的值。除非你需要有时包括重复。

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


-2
投票

您还可以实现与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)
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.