我有一个字符串列表
val myStrings = List("One", "Two", "Three")
我想检查列表中是否包含我做的字符串。
myStrings.exists("One".contains)
我从谷歌搜索得到这个。但我想了解它。
我看到你可以"One".contains("O")
检查One
包含O
是否有意义。但是我没有得到传递给myStrings.exists时没有参数的方法。
我缺少什么?
答案 0 :(得分:4)
这是速记,或“语法糖”。
我确定你见过List("A","B").foreach(println)
。
这是相同的,如果只有一个参数,则无需指定参数。
所以myStrings.exists("One".contains)
是
myStrings.exists("One" contains _)
这本身就是完整函数文字的简写
myStrings.exists(x => "One" contains x)
请注意,这不会检查您的列表contains
String
“One”,它会检查您的List
是否包含包含的String
“一个”。
您可能只想在contains
上使用List
方法。
另请注意,contains
上的List
为O(n)。 Set
上的相同方法是O(1) - 即恒定时间。
答案 1 :(得分:1)
当您将Function1传递给期望一个Function1的函数或方法时,您可以省略下划线。
List#foreach
需要Function1[X,Unit]
,因此您可以说myList.foreach(println)
代替myList.foreach(println(_))
或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)