次のような for ループを作成するにはどうすればよいですか
for (int x=0; x<data.length; x+=2)
ルビーで?配列を反復処理したいのですが、カウンターを 1 つではなく 2 つ増やします。
次のような for ループを作成するにはどうすればよいですか
for (int x=0; x<data.length; x+=2)
ルビーで?配列を反復処理したいのですが、カウンターを 1 つではなく 2 つ増やします。
一度に配列から 2 つのアイテムを消費することが本当に必要な場合は、each_sliceを確認してください。
[1,2,3,4,5,6,7,8,9].each_slice(2) do |a, b|
puts "#{a}, #{b}"
end
# result
1, 2
3, 4
5, 6
7, 8
9,
Ruby'sstep
はあなたの友達です:
0.step(data.length, 2).to_a
=> [0, 2, 4, 6]
to_a
これが返す値を示すために使用しています。実際step
には列挙子なので、次のように使用します。
data = [0, 1, 2, 3, 4, 5]
0.step(data.length, 2).each do |i|
puts data[i]
end
どの出力:
0
2
4
<== a nil
data
には 6 つの要素が含まれているため、 がdata.length
返されます6
が、配列はゼロ オフセットであるため、最後の要素は要素 #5 になります。3 つの値と、印刷時に空行として表示される nil のみを取得します。これは要素 #6 になります。
data[6]
=> nil
そのため、通常、Ruby で外部イテレーターを使用して配列とコンテナーをウォークすることはありません。端から落ちるのはあまりにも簡単です。代わりに、each
常に正しいことを行う同様の構造を使用してください。
配列とコンテナーのゼロオフセットを引き続き使用step
して処理するには、次を使用できます。
0.step(data.length - 1, 2)
しかし、 @SergioTulentsevが例として挙げてeach
いた最初の選択肢として、他の配列イテレータを使用してみます。
(0..data.length).step(2) do |x|
puts x
end
これは最も近い代替のようです。