Lor*_*tté 6 scala scala-collections
我需要检查一下Traversable(我已经知道nonEmpty)是否有一个或多个元素.
我可以使用size,但(告诉我,如果我错了)我怀疑这可能是O(n),并遍历集合来计算它.
我可以查看是否tail.nonEmpty,或者是否.head != .last
这两种方法的优缺点是什么?有没有更好的办法?(例如,还会.last进行完整的迭代吗?)
从收集开始和返回尾部切割元素的所有方法都是低效的.例如,tail对于ListO(1),而tailfor Array是O(N).与...相同drop.
我建议使用take:
list.take(2).size == 1 // list is singleton
Run Code Online (Sandbox Code Playgroud)
take如果集合长度小于take参数,则声明返回整个集合.因此,如果集合为空或只有一个元素,则不会出现错误.另一方面,如果收集量巨大,take则会在O(1)时间内运行.在内部take将开始迭代您的集合,采取两个步骤并中断,将元素放入新集合中以返回.
UPD:我改变了条件以完全匹配问题