我正在尝试找到从scala中的List[Map[String, String]]
中弹出元素的最有效方法。
我想要的是这样的:
val last = myList.pop
这里最后一个应该有最后一个元素,而myList应该包含最后一个元素。
我可以使用last和init在两个操作中执行此操作,但这需要两个线性操作。我怎么能避免这个?
答案 0 :(得分:2)
弹出列表的最后一个元素,同时保留其余元素的有效方法是反转列表:
val last::rest = list.reverse
这样可以使列表的其余部分保持相反,因此下一个弹出窗口是:
val last2 :: rest2 = rest
所以“pop” - 列表中的所有其他元素都是便宜的O(1)。请注意,如果列表为空,此操作将失败,因此需要相应地保护它。
也就是说,根据用例,考虑其他数据结构可能会更好。经典的FILO结构是一个堆栈。诸如Arrays之类的可索引结构也可以作为实现的基础。
答案 1 :(得分:-1)
我们可以使用takeRight函数,它以相同的方式工作,但是从序列的结尾开始并向前移动,从序列的末尾获取指定数量的元素:
val last = mylist.takeRight(1)
此语句将为您提供最后一个元素。