为什么ruby中的循环.只运行了一半?

1 ruby loops

我在使用这个循环时遇到了问题:

a = [1,2,3,4]
a.each{puts "#{a.shift}"}
Run Code Online (Sandbox Code Playgroud)

我只得到1,2.任何人都可以帮助我吗?

Wil*_*son 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]
Run Code Online (Sandbox Code Playgroud)