我需要检查Traversable
(我已经知道是nonEmpty
)是否具有单个或多个元素。
我可以使用size
,但是(如果我错了,请告诉我)我怀疑这可能是O(n),然后遍历集合进行计算。
我可以检查tail.nonEmpty
还是.head != .last
两种方法的优缺点是什么?有没有更好的办法? (例如,.last
也会进行完整的迭代吗?)
最佳答案
从收集的开始和返回的尾部削减元素的所有方法都是无效的。例如,用于tail
的List
为O(1),而用于tail
的Array
为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/