从一个列表中弹出最后一个元素 Scala

3
我正在尝试找到从Scala的List [Map [String,String]]中弹出元素的最有效方法。
我想要的是像这样的东西:
val last = myList.pop

最后一个元素应该在last中,myList中应该包含除了最后一个元素以外的所有东西。

我可以使用last和init两个操作来完成此操作,但这将需要两个线性操作。有什么方法可以避免这种情况呢?


你需要交替添加和删除元素吗?还是想要使用 list.pop 直到列表为空?使用模式可能会产生不同的方法。 - maasg
3
为什么不使用栈?或者向量?或者几乎任何一个列表之外的东西 - 在你知道你需要对最后一个元素进行操作时选择列表是……奇怪的。 - The Archetypal Paul
2个回答

3

一种高效的方法来弹出列表中的最后一个元素,同时保留其余元素是将该列表反转:

val last::rest = list.reverse

这将导致列表的其余部分反转,因此下一个弹出是:
val last2 :: rest2 = rest

所以,弹出列表中的所有其他元素是很便宜的O(1)操作。请注意,如果列表为空,则此操作将失败,因此需要相应地加以保护。

话虽如此,根据使用情况,考虑其他数据结构可能会更好。经典的FILO结构是堆栈。可索引结构,如数组,也可以成为实现的基础。


-1
我们可以使用`takeRight`函数,它的工作方式与`take`相同,但是从序列的末尾开始移动,并且从序列的末尾取指定数量的元素。
val last = mylist.takeRight(1) 

这个语句将会返回最后一个元素。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接