もし私がarr = [1, 2, 3, 4]
私は次のことができることを知っています...
> arr.each_slice(2) { |a, b| puts "#{a}, #{b}" }
1, 2
3, 4
...そして...
> arr.each_with_index { |x, i| puts "#{i} - #{x}" }
0 - 1
1 - 2
2 - 3
3 - 4
...しかし、これを行うための組み込みの方法はありますか?
> arr.each_slice_with_index(2) { |i, a, b| puts "#{i} - #{a}, #{b}" }
0 - 1, 2
2 - 3, 4
自分で作成して配列メソッドに組み込むことができることはわかっています。これを行うための組み込み関数があるかどうかを確認するだけです。
ほとんどのイテレータメソッドと同様に、each_slice
は、ブロックなしで呼び出されたときにRuby 1.8.7+)から列挙型を返し、さらに列挙型のメソッドを呼び出すことができます。
arr.each_slice(2).with_index { |(a, b), i| puts "#{i} - #{a}, #{b}" }
arr.each_slice(2).with_index { |(*a), i| ...
また、ブロックの最初のパラメーターである配列は* arr
1.9では、ブロックが提供されていない場合、多くのメソッドが列挙子を返します。列挙子で別のメソッドを呼び出すことができます。
arr = [1, 2, 3, 4, 5, 6, 7, 8]
arr.each_with_index.each_slice(2){|(a,i), (b,j)| puts "#{i} - #{a}, #{b}"}
(@ sepp2kのバリエーション)。結果:
0 - 1, 2
2 - 3, 4
4 - 5, 6
6 - 7, 8