2014-01-18 114 views
2

在IRB提示:紅寶石數組中刪除在

array = [1,2,3,4,5] 
array << 0 
array.sort 
[0,1,2,3,4,5] 

我完全理解上述內容,但我這樣做時:

array.delete_at(2) 

它在陣列中刪除3。 如果第一個被認爲是1,爲什麼數字3被刪除而不是數字1?

+0

你確定3被刪除?它不得不刪除2而不是1 –

+0

嗨。讓我重申一下:它刪除數組中的數字3。所以是的,數字3被刪除了。如果我鍵入:array.sort,它會給出:[0,1,2,4,5] –

+0

你想'sort!'而不是'sort'。 – Voldemort

回答

2

由於array.sort不保存排序的數組,它只是返回它。這意味着當您撥打array.delete_at(2)時,您的陣列仍然是[1,2,3,4,5]。你想要調用的是array.sort!,它對你的原始數組進行排序和修改。

+0

謝謝你們!上面的答案與下面的答案相同,因此第一個答案很清楚。琳達程序沒有提到有關「array.sort!」的信息 –

0

array.sort不會更改您的陣列。所以當運行delete_at(2)時,你的數組仍然是[1,2,3,4,5,0]。要排序並「保存」您的陣列,請改爲使用sort!

2

array,sort返回一個新的數組,它不會修改原始數組。如果你想要突變版本,那麼你使用array.sort!。否則,你會寫:

array = array.sort 

但是,在這種情況下,你只需用更好:

array.sort! 

也...

如果第一個被認爲是1 ,爲什麼數字3被刪除而不是數字1?

陣列中的Ruby是零索引,即,第一索引爲0索引2(在排序後的數組,其包括0)。將2,而不是1