使用此循环时出现问题:
a = [1,2,3,4]
a.each{puts "#{a.shift}"}
a我刚拿到1,2。任何人都可以帮助我吗?
答案 0 :(得分:5)
Array#shift
从数组中删除第一个值并返回它。因此,当您循环遍历数组时,数组将被修改。
each
方法似乎基本上循环,直到索引大于或等于数组的长度。因为您在循环时从数组中删除元素,所以数组的长度会减小。当你删除了两个元素时,索引是2,长度是2,所以.each
循环退出。
即:
Index: 0
Array: [1, 2, 3, 4]
Print: 1
Index: 1
Array: [2, 3, 4]
Print: 2
Index: 2 # Exit here
Array: [3, 4]
答案 1 :(得分:1)
Array#shift
修改一个数组。可以迭代并打印值,或者使用循环,除非变异数组为空:
a.each { |elem| puts elem }
#⇒ a is still [1,2,3,4]
或
while a.size > 0 do puts a.shift end
#⇒ a is empty []
或
until a.empty? do puts a.shift end
#⇒ a is empty []
在您的示例中,a
发生了变异,因此在第三次迭代时,没有更多要迭代的元素。