Ruby在迭代时删除数组元素
通过运行上述代码,我得到以下输出:Ruby在迭代时删除数组元素,ruby,Ruby,通过运行上述代码,我得到以下输出: a = ['red', 'green', 'blue', 'purple'] a.each do |e| puts e if e == 'green' a.delete(e) end end 有人能给我解释一下幕后发生了什么吗?这是每个 red green purple 为了补充Sergio的解释,更惯用的修改数组的方法是: v red green blue purple # print red # next v red g
a = ['red', 'green', 'blue', 'purple']
a.each do |e|
puts e
if e == 'green'
a.delete(e)
end
end
有人能给我解释一下幕后发生了什么吗?这是
每个
red
green
purple
为了补充Sergio的解释,更惯用的修改数组的方法是:
v
red green blue purple # print red
# next
v
red green blue purple # print green
v
red blue purple # delete green in the same iteration
# next
v
red blue purple # print purple
因此:
不,你应该得到“红、蓝、紫”。您使用的ruby版本是什么?我使用的是ruby 2.3.3p222。无论如何,我删除了看跌期权之后的内容,所以“绿色”应该以任何方式打印出来。我想知道“蓝色”是如何被跳过的?是的,你是对的。甚至在块完成执行之前就进行了转换?实际上,我无法理解本机代码:(你能写一个伪代码吗?@AkashCP在delete
返回之前进行转换,是的。
v
red green blue purple # print red
# next
v
red green blue purple # print green
v
red blue purple # delete green in the same iteration
# next
v
red blue purple # print purple
a = ['red', 'green', 'blue', 'purple']
a.reject! do |e|
puts e
e == 'green'
end
2.2.5 :001 > a = ['red', 'green', 'blue', 'purple']
=> ["red", "green", "blue", "purple"]
2.2.5 :002 > a.reject! do |e|
2.2.5 :003 > puts e
2.2.5 :004?> e == 'green'
2.2.5 :005?> end
red
green
blue
purple
=> ["red", "blue", "purple"]
2.2.5 :006 >