我需要检查Traversable(我已经知道是nonEmpty)是否具有单个或多个元素。

我可以使用size,但是(如果我错了,请告诉我)我怀疑这可能是O(n),然后遍历集合进行计算。

我可以检查tail.nonEmpty还是.head != .last
两种方法的优缺点是什么?有没有更好的办法? (例如,.last也会进行完整的迭代吗?)

最佳答案

从收集的开始和返回的尾部削减元素的所有方法都是无效的。例如,用于tailList为O(1),而用于tailArray为O(N)。与drop相同。

我建议使用take:

 list.take(2).size == 1 // list is singleton

如果集合长度小于take的参数,则声明take返回整个集合。因此,如果collection为空或只有一个元素,就不会有错误。另一方面,如果集合很大,take仍将在O(1)时间运行。内部take将开始迭代您的集合,执行两个步骤并中断,将元素放入新集合中以返回。

UPD:我将条件更改为与问题完全匹配

关于scala - 检查可遍历在Scala中是否包含1个以上元素的有效方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26039327/

10-12 00:41