检查 Scala Set 中所有 'Seq' 元素的大小是否为 1 的最快方法是什么?

What is the fastest way to check whether all 'Seq' elements are of size 1 in a Scala Set?

这就是我现在正在做的事情:

val foo = Set[Seq[Int]](Seq(1), Seq(2), Seq(3))
val isAllSizeOne = foo.foldLeft(true) { case (agg, curr) => agg && curr.size == 1}

我能比这更快吗?

方法 forall 旨在完全满足您的要求。

foo.forall(_.size == 1)

在大多数情况下,这将是您能找到的最快的实施方式。一如既往,如果它非常重要,您应该尝试对备选方案进行基准测试 and/or,并注意哪个最快可能取决于您使用的是哪个集合。

最简洁的版本:

val isAllSizeOne = foo.forall(_.size == 1)

另一个 可能 更快但不够简洁的替代方案:

val isAllSizeOne = foo.forall(_.lengthCompare(1) == 0)

对于非常大的集合,也值得考虑使用 par 的并行版本,例如这样,

foo.par.forall(_.size == 1)

大小操作需要依次遍历所有元素,另一种可能是:

foo.forall(l => l.nonEmpty && l.tail.isEmpty)

虽然考虑到Sequence的大小很小,但差别不大。