我很難理解Ruby中Array類的移位和非移位方法。有人能幫我理解他們做什麼嗎?Ruby的Array#shift做什麼?
回答
Array.shift刪除該數組的第一元素,並返回它
a = [1,2,3]
puts a.shift
=> 1
puts a
=> [2, 3]
不印字預先考慮所提供的值到的前陣列,將所有其他元素向上移動一個
a=%w[b c d]
=> ["b", "c", "d"]
a.unshift("a")
=> ["a", "b", "c", "d"]
你基本上可以認爲移位和不移位在FIFO隊列上的操作 – 2010-09-16 09:13:21
'unshift''是如此的一個發現,謝謝! – dgilperez 2012-08-30 18:52:20
@JacoPretorius Huh? 'shift'和'unshift'就像FILO棧一樣,'push'和'shift'就像FIFO隊列一樣,除非我對某些東西感到困惑。 – 2017-12-27 19:37:36
它抓取第一個元素,將其從數組中移除,並返回已移除的元素。它基本上是一種像堆棧一樣對待數組的方法:彈出shift
,推送unshift
。
移位和不移位與pop和push類似*除了它們從數組的開始處添加和移除,而不是從結尾開始。 – 2010-09-15 14:36:39
這個答案恰恰處於正確的抽象層次。 – 2010-09-15 14:37:05
@Alberto:或者換句話說,他們認爲前端是頂端。沒有其他要求。 – 2010-09-15 14:37:35
shift
和unshift
作用在相似的方式pop
和push
:他們是爲了使用數組作爲堆棧可向其中追加和刪除元素(每個時間通常之一)。所不同的是在Array
之初只是shift
和unshift
添加/刪除元素,實際上轉變荷蘭國際集團所有其他元素,而在Array
結束pop
和push
添加/刪除元素,所以保留其他元素的索引。
實例:
# Spacing for clarity:
a = [2, 4, 8] # a => [2, 4, 8]
a.push(16, 32) # a => [2, 4, 8, 16, 32]
a.unshift(0, 1) # a => [0, 1, 2, 4, 8, 16, 32]
a.shift # a => [1, 2, 4, 8, 16, 32]
a.pop # a => [1, 2, 4, 8, 16]
如果您要編輯您的答案來總結mipadi線程,我會很高興得到讚揚。 – 2010-09-15 14:53:53
很酷。另外,我對Ruby不是很瞭解,但如果它運行在JVM上,那麼我會期望push/pop會更快,因爲它不必移動所有這些元素。 – 2010-09-15 15:52:33
Upvote for stacky,但也想到管道。因爲我們應該是程序員,所以我們也應該認爲轉變是一種左移,右移是右轉陣列的右移。 – mckenzm 2016-07-27 23:08:55
如果您可以將數組視爲要處理的值的隊列,那麼您可以獲取下一個(前)值並「移動」另一個值以佔用可用的空間。 unshift將值重新放入 - 也許你還沒有準備好處理其中的一些,或者讓稍後的代碼處理它們。
- 1. array $ arr + = array $ arr1是做什麼的?
- 2. 爲什麼JavaScript Array#shift或Array#slice會導致性能問題?
- 3. shift array by k
- 4. C-Shift Array
- 5. Ruby的Array#join中的「current $」是什麼?
- 6. as3 ARRAY SHIFT - 數組的末尾現在是什麼?
- 7. ruby_executable_hooks是做什麼的?
- 8. 在Ruby中,array * string是什麼意思?
- 9. Ruby代碼在做什麼?
- 10. 在Ruby中做什麼==?
- 11. 「|| =」在Ruby 1.9.2中做什麼?
- 12. set_if_nil.call在ruby中做什麼?
- 13. (爲什麼)設置`array [NaN]`什麼也不做?
- 14. 在Visual Studio項目樹中按SHIFT + DEL是做什麼的?
- 15. Ruby on Rails'method'to_sym'是做什麼的?
- 16. :: MyClass Ruby scope operator是做什麼的?
- 17. Ruby中send()是做什麼的?
- 18. 這是Textmate鍵盤快捷鍵在做什麼(Control + Shift +。)
- 19. 爲什麼沒有String#shift()?
- 20. '|| ='操作符在ruby中做了什麼?
- 21. String(42)在Ruby中做什麼?
- 22. 這個Ruby函數在做什麼?
- 23. World()方法在ruby中做了什麼?
- 24. 在這裏做的折衷是什麼? (push vs. Array)
- 25. Ruby array + = vs push
- 26. array_merge和array + array有什麼區別?
- 27. 「Array(n)」和「[... Array(n)]」有什麼區別?
- 28. Ruby錯誤:undefined方法'shift'
- 29. shift + tab的關鍵代碼是什麼?
- 30. 「Shift +方向鍵」的鍵碼是什麼?
一旦你知道'shift/unshift'就像數組另一端的'push/pop',你可以從方法的名字中小心地刪除'f'來記住哪個'dump'元素和哪一個「插入」它們。 :) – Phrogz 2011-01-21 17:37:03
謝謝,實際上幫助大聲笑。 – agentbanks217 2011-01-23 18:55:17
有史以來最好的評論之一!非常感謝你:) – tvdeyen 2012-11-06 13:14:13