Ruby数组删除指定位置处的元素

3
在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?


你确定移除了3吗?应该是要移除2而不是1。 - Said Kaldybaev
嗨。让我重申一下:它删除了数组中的数字3。所以是的,数字3被移除了。如果我输入array.sort,它会输出[0,1,2,4,5]。 - Syler Ruby
你需要使用 sort! 而不是 sort - Saturn
3个回答

3

因为array.sort不会保存排序后的数组,它只是返回它。这意味着当你调用array.delete_at(2)时,你的数组仍然是[1,2,3,4,5,0]。你想要调用的是array.sort!,它会对原始数组进行排序和修改,使其变成[0,1,2,3,4,5],并将2放在你期望找到它的位置。


谢谢大家!上面的答案和下面的是一样的,所以第一个是很清楚的。很遗憾,Lynda程序关于“array.sort!”一无所知。 - Syler Ruby

2

array.sort会返回一个新的数组,而不会修改原始数组。如果你想要修改原始数组,则需要使用array.sort!。否则,你可以这样写:

array = array.sort

但是,在这种情况下,最好只使用以下简单的方式:
array.sort!

此外...

如果第一个元素被视为1,那么为什么要删除数字3而不是数字1?

Ruby中的数组是从0开始索引,即第一个索引是0。在您的已排序包含0的数组中,索引2将是2,而不是1。


1

array.sort 不会改变你的数组。所以当运行 delete_at(2) 时,你的数组仍然是 [1,2,3,4,5,0]。要对数组进行排序并“保存”,请使用 sort!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接