Rubyでこのタイプのforループを実行するにはどうすればよいですか?
for(int i=0; i<array.length; i++) {
}
Rubyでこのタイプのforループを実行するにはどうすればよいですか?
for(int i=0; i<array.length; i++) {
}
回答:
array.each do |element|
element.do_stuff
end
または
for element in array do
element.do_stuff
end
インデックスが必要な場合は、次を使用できます。
array.each_with_index do |element,index|
element.do_stuff(index)
end
each
素晴らしいです。しかし、時々私はただ伝統的なforループが欲しいだけです。時々、「ルビーの方法」は単に迷惑なことがあります。
私はこれをグーグルの「rubyforloop」のトップリンクとしてヒットし続けているので、ステップが単に「1」ではないループのソリューションを追加したいと思いました。このような場合、NumericsオブジェクトとDateオブジェクトに存在する 'step'メソッドを使用できます。これは「for」ループの近似値だと思います。
start = Date.new(2013,06,30)
stop = Date.new(2011,06,30)
# step back in time over two years, one week at a time
start.step(stop, -7).each do |d|
puts d
end
array.each_index do |i|
...
end
これはあまりRubyっぽくはありませんが、Rubyで質問からforループを実行するための最良の方法です。
each
、むしろeach_index
。+1
配列にアクセスする必要がない場合は(単純なforループ)、uptoまたはeachを使用できます:
最大:
1.9.3p392 :030 > 2.upto(4) {|i| puts i}
2
3
4
=> 2
各:
1.9.3p392 :031 > (2..4).each {|i| puts i}
2
3
4
=> 2..4
Rubyの列挙ループ構文は異なります。
collection.each do |item|
...
end
これは、「 'blockargument'を引数としてブロックを取得する配列オブジェクトインスタンス 'collection'の 'each'メソッドへの呼び出し」と読みます。Rubyのブロック構文は、1行のステートメントの場合は「do ... end」または「{...}」です。
ブロック引数 '| item |' オプションですが、指定されている場合、最初の引数はループされた列挙アイテムを自動的に表します。