对于 Scala 的 Set,是否有类似于 Java 的 Set 中的 containsAll 方法的方法?
With Scala's Set, is there a method analog to the containsAll method in Java's Set?
在将一些 Java 代码转换为 Scala 时,我发现 Scala Set
有一个 contains
方法,但没有 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
证明是最简洁的。
值得补充的是,如果需要,您可以使用隐式丰富的 class 使 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
s:
Set(1,2,3) forall(Set(3, 2, 1) contains)
在将一些 Java 代码转换为 Scala 时,我发现 Scala Set
有一个 contains
方法,但没有 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
证明是最简洁的。
值得补充的是,如果需要,您可以使用隐式丰富的 class 使 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
s:
Set(1,2,3) forall(Set(3, 2, 1) contains)