如果我創建一個包含10個元素的新數組,並用數字1到10填充它,然後調用delete_at(4)
,則第四個元素將被「刪除」。delete_at(n)在Ruby中如何工作?
這是如何工作的?它是否完全刪除元素和索引並將數組大小減小到9,或者是否將該索引的值取消(或使其爲零),並將其推到數組的末尾?
如果我創建一個包含10個元素的新數組,並用數字1到10填充它,然後調用delete_at(4)
,則第四個元素將被「刪除」。delete_at(n)在Ruby中如何工作?
這是如何工作的?它是否完全刪除元素和索引並將數組大小減小到9,或者是否將該索引的值取消(或使其爲零),並將其推到數組的末尾?
它將位置後面的所有元素都複製到一個內存副本,然後將數組的大小減少一個。
你爲什麼問?你試圖推斷性能嗎?
Ref:https://github.com/ruby/ruby/blob/9f45081627cf682b3ee938353da134d6f28560da/array.c#L2964
我明白了。謝謝回答;該文檔的一句話並沒有完全削減它。 – IHazABone
該文檔有一個很好的例子,伴隨着一句話。回顧一下這個例子,如果需要的話在IRB中使用它,會立即顯示它是如何工作的,一個nil元素不會被添加到數組的末尾。除此之外,挖掘源代碼將詳細展示該方法的機制。 –
您可以1)閱讀文檔或2)嘗試它。 (如果你問的是*實現*,而不是語義,請務必引出主題。) – user2864740
我的意思是該方法的機制如何工作,而文檔的單個句子沒有解釋這一點。 – IHazABone
[文檔(和示例)](http://www.ruby-doc.org/core-1.9.3/Array.html#method-i-delete_at)解釋了語義就好了。確保提出問題(也可以更新),以便他們專注於確切的問題/問題。 – user2864740