在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?
rqcrx0a61#
因为array.sort不保存已排序的数组,它只是返回它。这意味着当你调用array.delete_at(2)时,数组仍然是[1,2,3,4,5,0]。我们要调用的是array.sort!,它将原始数组排序并修改为[0,1,2,3,4,5],并将2放在您期望找到它的位置。
array.sort
[1,2,3,4,5,0]
array.sort!
[0,1,2,3,4,5]
2
b4lqfgs42#
array,sort * 返回 * 一个新数组,它不修改原始数组。如果你想要一个可变的版本,那么你可以使用array.sort!。否则,你会写:
array,sort
array = array.sort
但是,在这种情况下,你最好简单地:
还有...如果第一个被认为是1,为什么数字3被删除而不是1?Ruby中的数组是零索引的,即第一个索引为0。索引2(在包含0的排序数组中)将是2,而不是1。
mrfwxfqh3#
array.sort不会改变数组。因此,当运行delete_at(2)时,数组仍然是[1,2,3,4,5,0]。要对数组进行排序和“保存”,请改用sort!。
delete_at(2)
sort!
3条答案
按热度按时间rqcrx0a61#
因为
array.sort
不保存已排序的数组,它只是返回它。这意味着当你调用array.delete_at(2)
时,数组仍然是[1,2,3,4,5,0]
。我们要调用的是array.sort!
,它将原始数组排序并修改为[0,1,2,3,4,5]
,并将2
放在您期望找到它的位置。b4lqfgs42#
array,sort
* 返回 * 一个新数组,它不修改原始数组。如果你想要一个可变的版本,那么你可以使用array.sort!
。否则,你会写:但是,在这种情况下,你最好简单地:
还有...
如果第一个被认为是1,为什么数字3被删除而不是1?
Ruby中的数组是零索引的,即第一个索引为0。索引2(在包含0的排序数组中)将是2,而不是1。
mrfwxfqh3#
array.sort
不会改变数组。因此,当运行delete_at(2)
时,数组仍然是[1,2,3,4,5,0]
。要对数组进行排序和“保存”,请改用sort!
。