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

问题描述 投票:17回答:4

[在通过将一些Java代码转换为Scala的过程中,我发现,虽然Scala的containsSet方法,但没有containsAll方法。我只是缺少正确的方法名称吗?

以下是我编写的一些代码来填补空白,因此我可以快速恢复工作。这足够了吗,还是我缺少一些微妙之处?

  def containsAll[A](set: Set[A], subset: Set[A]): Boolean =
    if (set.size >= subset.size)
      subset.forall(a => set.contains(a))
    else
      false
java scala set contains
4个回答
28
投票

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

8
投票

在Scala中,Set具有诸如intersect之类的设置操作,因此]

set.intersect(subset) == subset

传达containsAll的语义,甚至已经提到的subsetOf证明最简洁。


6
投票

值得一提的是,如果需要,可以使用隐式丰富的类使派生的辅助方法(如containsAllSet[T]上可用)。您还可以考虑进行可变参数重载:


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.