在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?
因为array.sort
不会保存排序后的数组,它只是返回它。这意味着当你调用array.delete_at(2)
时,你的数组仍然是[1,2,3,4,5,0]
。你想要调用的是array.sort!
,它会对原始数组进行排序和修改,使其变成[0,1,2,3,4,5]
,并将2
放在你期望找到它的位置。
array.sort
会返回一个新的数组,而不会修改原始数组。如果你想要修改原始数组,则需要使用array.sort!
。否则,你可以这样写:
array = array.sort
array.sort!
此外...
如果第一个元素被视为1,那么为什么要删除数字3而不是数字1?
Ruby中的数组是从0开始索引,即第一个索引是0。在您的已排序包含0的数组中,索引2将是2,而不是1。
array.sort
不会改变你的数组。所以当运行 delete_at(2)
时,你的数组仍然是 [1,2,3,4,5,0]
。要对数组进行排序并“保存”,请使用 sort!
。
sort!
而不是sort
。 - Saturn