我需要检查一个Traversable
(我已经知道是nonEmpty
)是否具有单个或多个元素。
我可以使用size
,但是(如果我错了,请告诉我)我怀疑这可能是O(n),然后遍历集合进行计算。
我可以检查tail.nonEmpty
是否.head != .last
两种方法的优缺点是什么?有没有更好的办法?(例如,是否还会.last
进行完整的迭代?)
从收集开始和返回尾部切掉元素的所有方法都是无效的。例如,tail
forList
是O(1),而tail
forArray
是O(N)。与相同drop
。
我建议使用take
:
list.take(2).size == 1 // list is singleton
take
如果集合长度小于take
的参数,则声明返回整个集合。因此,如果collection为空或只有一个元素,就不会有错误。另一方面,如果集合很大,则take
仍将在O(1)时间中运行。内部take
将开始迭代您的集合,执行两个步骤并中断,然后将元素放入新集合中以返回。
UPD:我更改了条件以完全符合问题
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句