繁体   English   中英

使用 Scala 的 Set,是否有类似于 Java 的 Set 中的 containsAll 方法的方法?

[英]With Scala's Set, is there a method analog to the containsAll method in Java's Set?

同时通过将一些Java代码到Scala的工作,我发现虽然是一个contains方法Scala的Set ,没有一个containsAll方法。 我只是缺少正确的方法名称吗?

这是我为填补空白而编写的一些代码,以便我可以快速恢复工作。 是否足够,还是我错过了一些微妙之处?

  def containsAll[A](set: Set[A], subset: Set[A]): Boolean =
    if (set.size >= subset.size)
      subset.forall(a => set.contains(a))
    else
      false

subsetOf ,它测试一个Set的元素是否包含在另一个Set (表达方式正好相反)

val set = Set(1,2,3,4)
val subset = Set(1,2)

scala> subset.subsetOf(set)
res0: Boolean = true

scala> set.subsetOf(subset)
res1: Boolean = false

在 Scala 中, Set配备了诸如intersect集合操作,例如

set.intersect(subset) == subset

传达了containsAll的语义,即使已经提到的subsetOf证明是最简洁的。

值得补充的是,如果需要,您可以通过使用隐式的丰富类,使像containsAll这样的派生辅助方法在Set[T]上可用。 您还可以考虑进行可变参数重载:

implicit class RichSet[T](val x: Set[T]) extends AnyVal {
    def containsAll(y: Set[T]): Boolean = y.subsetOf(x)
    def containsAll(y: T*): Boolean = x.containsAll(y.toSet)
}

那么你可以这样做:

Set(1, 2, 3).containsAll(Set(1, 2))

或者:

Set(1, 2, 3).containsAll(1, 2)

以前的答案都很好,我只是提出了另一种选择。 这个也适用于没有subsetOf方法的List

Set(1,2,3) forall(Set(3, 2, 1) contains)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM