[在通过将一些Java代码转换为Scala的过程中,我发现,虽然Scala的contains
有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]
上可用)。您还可以考虑进行可变参数重载:
先前的答案都很好,我只是提出了另一个选择。这也可以用于没有List
方法的subsetOf
: