1

我有一个字符串列表

val myStrings = List("One", "Two", "Three")

我想检查列表是否包含我所做的字符串。

myStrings.exists("One".contains)

我从谷歌搜索得到这个。但我想了解它。

我看你能做到"One".contains("O")

检查One包含O有道理。但是我不明白传递给 myStrings.exists 时没有参数是如何工作的。

我错过了什么?

4

2 回答 2

4

这是速记,或“语法糖”。

我相信你已经看到了List("A","B").foreach(println)

同理,只有一个参数就不需要指定了。

myStrings.exists("One".contains)简写也是

myStrings.exists("One" contains _)

它本身就是完整函数文字的简写

myStrings.exists(x => "One" contains x)

请注意,这不会检查您的列表是否containsString“One”,它会检查您是否List包含String包含“One”中的 a。

您可能只需要containsList.

另请注意,containsonList是 O(n)。相同的方法Set是 O(1) - 即恒定时间。

于 2013-04-12T20:10:57.817 回答
1

将 Function1 传递给需要 Function1 的函数或方法时,可以省略下划线。

List#foreach期望 a Function1[X,Unit],所以你可以说myList.foreach(println)代替myList.foreach(println(_))or myList.foreach(x => println(x))

相似地:

scala> val xs = List("a","b","c")
xs: List[String] = List(a, b, c)

scala> val set = Set("c","d","e")
set: scala.collection.immutable.Set[String] = Set(c, d, e)

scala> xs.filter(set.contains)
res0: List[String] = List(c)
于 2013-04-13T01:57:58.937 回答