我有一个字符串列表
val myStrings = List("One", "Two", "Three")
我想检查列表是否包含我所做的字符串。
myStrings.exists("One".contains)
我从谷歌搜索得到这个。但我想了解它。
我看你能做到"One".contains("O")
检查One
包含O
有道理。但是我不明白传递给 myStrings.exists 时没有参数是如何工作的。
我错过了什么?
这是速记,或“语法糖”。
我相信你已经看到了List("A","B").foreach(println)
。
同理,只有一个参数就不需要指定了。
myStrings.exists("One".contains)
简写也是
myStrings.exists("One" contains _)
它本身就是完整函数文字的简写
myStrings.exists(x => "One" contains x)
请注意,这不会检查您的列表是否contains
为String
“One”,它会检查您是否List
包含String
包含在“One”中的 a。
您可能只需要contains
在List
.
另请注意,contains
onList
是 O(n)。相同的方法Set
是 O(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)