这就是我现在正在做的事情:
val foo = Set[Seq[Int]](Seq(1), Seq(2), Seq(3))
val isAllSizeOne = foo.foldLeft(true) { case (agg, curr) => agg && curr.size == 1}
我可以比这更快吗?
答案 0 :(得分:9)
方法forall
旨在完全按照您的要求进行。
foo.forall(_.size == 1)
在大多数情况下,它是您能找到的最快的实施方案。与往常一样,如果它非常重要,您应该尝试对备选方案进行基准测试和/或分析,并注意哪个最快可能取决于您正在使用哪个集合。
答案 1 :(得分:9)
最简洁的版本:
val isAllSizeOne = foo.forall(_.size == 1)
另一种替代方案可能更快但不简洁:
val isAllSizeOne = foo.forall(_.lengthCompare(1) == 0)
答案 2 :(得分:4)
对于非常大的集合,值得考虑使用par
的并行版本,例如像这样,
foo.par.forall(_.size == 1)
答案 3 :(得分:1)
大小操作需要按顺序遍历所有元素,另一种选择可能是:
foo.forall(l => l.nonEmpty && l.tail.isEmpty)
虽然考虑到序列的大小很小,但它没有太大的区别。