为什么这段代码只删除数组中的元素?我希望for循环遍历每个值0到3,并一次删除一个元素.但它只删除了[0]和[2].我究竟做错了什么?提前致谢 -
a=%w(ant bat cat dog)
puts a.inspect #output: ["ant", "bat", "cat", "dog"]
for k in (0..3)
a.delete_at(k)
end
puts a.inspect #output: ["bat", "dog"]
Run Code Online (Sandbox Code Playgroud)
UPDATE--
谢谢您的反馈; 我明白我现在在做什么.为了删除数组的每个元素,Array方法'shift'是合适的.例如:
for each in (0..3)
a.shift
print a
end
Run Code Online (Sandbox Code Playgroud)
这会将第一个元素移出数组,并将每个后续元素向前移动一个单元格.感谢您推荐使用'each' - 我可以看到它是首选语法.
更新2--
以下代码部分是否更能代表正确的ruby语法?
(0..3).to_a.each do
a.shift
p a
end
Run Code Online (Sandbox Code Playgroud)
感谢Glenn关于删除数组内容的建议.
因为当你删除元素0时,元素1将是原始数组的元素2.
Initially:
[ant, bat, cat, dog]
a.delete_at[0] => ant
[bat, cat, dog]
go to next element -> 1
a.delete_at[1] => cat
[bat, dog]
go to next element -> 2
a.delete_at[2] => nil (out of range)
go to next element -> 3
a.delete_at[3] => nil
Run Code Online (Sandbox Code Playgroud)
因为您正在删除数组,并且第三次执行进入循环,所以您的数组比值小k.
尝试执行
a=%w(ant bat cat dog)
puts a.inspect #output: ["ant", "bat", "cat", "dog"]
for k in (0..3).to_a
p k
a.delete_at(k)
p a
end
puts a.inspect #output: ["bat", "dog"]
Run Code Online (Sandbox Code Playgroud)
这是输出
0
["bat", "cat", "dog"]
1
["bat", "dog"]
2
["bat", "dog"]
3
["bat", "dog"]
Run Code Online (Sandbox Code Playgroud)
如果k是2,你正在试图删除索引的元素2,但你的阵列只能由2种元素的索引0和1组成的.
PS.避免使用for.each相反,使用"更加面向Ruby".