匹配集合中的多个元素

时间:2012-12-06 09:01:53

标签: scala scala-2.9

定义:

val x = List(1, 2, 3, 4)

我想查找x是否包含13。 一种方法是

x.contains(1) || x.contains(3)

另一个是

x.exists(y => y == 1 || y == 3)

另一个是:

x.exists(List(1,3).contains(_))

我更喜欢与

相似的东西
x.containsAnyOf(1, 3)

请注意x.containsSlice在这种情况下不起作用。

有更好的解决方案吗?

2 个答案:

答案 0 :(得分:12)

你可以做到

x exists Set(0, 1, 2)

答案 1 :(得分:5)

当然,Scala的标准库中没有containsAnyOf。您可以使用“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)

现在你可以做到:

scala> val a = List(1,2,3,4)
a: List[Int] = List(1, 2, 3, 4)

scala> a.containsAnyOf(1,3)
res0: Boolean = true