14

次のような for ループを作成するにはどうすればよいですか

for (int x=0; x<data.length; x+=2) 

ルビーで?配列を反復処理したいのですが、カウンターを 1 つではなく 2 つ増やします。

4

4 に答える 4

40

一度に配列から 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,
于 2013-08-20T15:05:19.727 に答える
6

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いた最初の選択肢として、他の配列イテレータを使用してみます。

于 2013-08-20T15:23:50.283 に答える
1
(0..data.length).step(2) do |x|
puts x
end

これは最も近い代替のようです。

于 2013-08-20T20:48:12.467 に答える