迭代與索引

有時,你希望在迭代列舉器時知道當前元素的位置( 索引 )。為此,Ruby 提供了 with_index 方法。它可以應用於所有列舉器。基本上,通過將 with_index 新增到列舉中,你可以列舉該列舉。索引作為第二個引數傳遞給塊。

[2,3,4].map.with_index { |e, i| puts "Element of array number #{i} => #{e}" }
#Element of array number 0 => 2
#Element of array number 1 => 3
#Element of array number 2 => 4
#=> [nil, nil, nil]

with_index 有一個可選引數 - 預設情況下第一個是 0 的索引:

[2,3,4].map.with_index(1) { |e, i| puts "Element of array number #{i} => #{e}" }
#Element of array number 1 => 2
#Element of array number 2 => 3
#Element of array number 3 => 4
#=> [nil, nil, nil]

each_with_index 有一個具體的方法。它與 each.with_index 的唯一區別在於你不能將引數傳遞給它,所以第一個索引始終是 0

[2,3,4].each_with_index { |e, i| puts "Element of array number #{i} => #{e}" }
#Element of array number 0 => 2
#Element of array number 1 => 3
#Element of array number 2 => 4
#=> [2, 3, 4]