匹配集合中的多个元素

Jus*_*s12 3 scala scala-2.9

限定:

val x = List(1, 2, 3, 4)
Run Code Online (Sandbox Code Playgroud)

我想找到是否x包含13.一种方法是

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在这种情况下不起作用.

有更好的解决方案吗?

4e6*_*4e6 12

你可以做

x exists Set(0, 1, 2)
Run Code Online (Sandbox Code Playgroud)


Jes*_*per 5

当然,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)