限定:
val x = List(1, 2, 3, 4)
Run Code Online (Sandbox Code Playgroud)
我想找到是否x包含1或3.一种方法是
x.contains(1) || x.contains(3)
Run Code Online (Sandbox Code Playgroud)
另一个是
x.exists(y => y == 1 || y == 3)
Run Code Online (Sandbox Code Playgroud)
另一个是:
x.exists(List(1,3).contains(_))
Run Code Online (Sandbox Code Playgroud)
我会更喜欢类似的东西
x.containsAnyOf(1, 3)
Run Code Online (Sandbox Code Playgroud)
请注意,x.containsSlice在这种情况下不起作用.
有更好的解决方案吗?
当然,containsAnyOfScala的标准库中没有.您可以使用"pimp my library"模式使其看起来像.
class ContainsAnyOf[T](seq: Seq[T]) {
def containsAnyOf(xs: T*) = seq.exists(xs.contains(_))
}
implicit def seqToContainsAnyOf[T](seq: Seq[T]) = new ContainsAnyOf(seq)
Run Code Online (Sandbox Code Playgroud)
现在你可以这样做:
scala> val a = List(1,2,3,4)
a: List[Int] = List(1, 2, 3, 4)
scala> a.containsAnyOf(1,3)
res0: Boolean = true
Run Code Online (Sandbox Code Playgroud)