我曾在python 在Python中有一個函數.pop()刪除列表中的最後一個值,並返回 刪除的值 前。 x = [1,2,3,4] x.pop()將返回4.pop()相當於斯卡拉
我想知道是否有一個相當於這個函數的scala?
我曾在python 在Python中有一個函數.pop()刪除列表中的最後一個值,並返回 刪除的值 前。 x = [1,2,3,4] x.pop()將返回4.pop()相當於斯卡拉
我想知道是否有一個相當於這個函數的scala?
如果您只想檢索最後一個值,您可以撥打x.last
。這不會從列表中刪除最後一個元素,但是,這是不可變的。相反,您可以撥打x.init
獲取由x
中的所有元素組成的列表,除了最後一個元素 - 再次沒有實際更改x
。所以:
val lastEl = x.last
val rest = x.init
會給你的最後一個元素(lastEl
),所有酒吧的最後一個元素(rest
),你仍然也有原來的列表(x
)的列表。
第一個答案是正確的,但你可以達到同樣這樣做的:
val last = x.last
val rest = x.dropRight(1)
有很多的different collection types Scala中,每一個都有自己的一套支持和/或性能良好的操作。
在斯卡拉,List
是一個像Lisp一樣的不可變缺陷單元序列。獲取last
元素不是一個很好的解決方案(head
元素很快)。類似地,Queue
和Stack
被優化用於特別從一端檢索元素和結構的其餘部分。如果您的訂單被逆轉,您可以使用其中任何一種。
否則,Vector
是一個很好的執行一般結構是快速既爲head
和last
電話:
val v = Vector(1, 2, 3, 4)
val init :+ last = v // uses pattern matching extractor `:+` to get both init and last
凡last
將是你pop
操作相當,init
與最後一個元素序列刪除(您也可以使用其他答案中建議的dropRight(1)
)。要只檢索最後一個元素,請使用v.last
。
我傾向於使用
val popped :: newList = list
其分配列表popped
的第一個元素,其餘名單newList
保持一致時間注意:這會從列表頭部(這是第一個,而不是最後一個元素)彈出, – Lucas
如果你願意放鬆對一成不變的結構需要,總是有棧和隊列:
val poppable = scala.collection.mutable.Stack[String]("hi", "ho")
val popped = poppable.pop
Python的彈出多個元素的能力類似,隊列處理是:
val multiPoppable = scala.collection.mutable.Queue[String]("hi", "ho")
val allPopped = poppable.dequeueAll(_ => true)
如果mutable.Queue
,使用dequeue
功能
/** Returns the first element in the queue, and removes this element
* from the queue.
*
* @throws java.util.NoSuchElementException
* @return the first element of the queue.
*/
def dequeue(): A =
if (isEmpty)
throw new NoSuchElementException("queue empty")
else {
val res = first0.elem
first0 = first0.next
decrementLength()
res
}
只知道,它是如何調用比去年更好,打完電話後得到一個新的列表dropRight(1)? –
'dropRight(1)'也可以完成這項工作(和'x.reverse.tail'以及其他各種可能的調用一樣)。儘管輸入的字符更少! :) – Shadowlands
不像流行x.reverse.tail將是O(n) –