Rubyのeachメソッドはハッシュだとキーが一緒に取得できるが、配列だとインデックスは取得できない。
HashとArray(配列)のeach
Hash
hash = {commander: "Mika", gunner: "Aki", driver: "Mikko"}
hash.each{|key, value|
puts "#{key} => #{value}"
}
Array
arg = ["Mika", "Aki", "Mikko"] arg.each{|value| puts value } # 引数を書いてもエラーにはならないが取得はできない arg.each{|index, value| p index # valueが出力される p value # nil }
each_with_index
each_with_index(*args) { |obj, i| block } → enum click to toggle source
配列をループで回してインデックスも欲しい時はeach_with_indexメソッドを使う。
厳密にはEnumerableクラスのメソッドになるっぽい。
arg = ["Mika", "Aki", "Mikko"] arg.each_with_index{|value, index| puts "#{index} => #{value}" }
ハッシュの時、eachメソッドの引数は|key, value|だけど、each_with_indexの引数は|value, index|と逆なので注意が必要。
each.with_indexという書き方もできるっぽい。
この場合も引数は|value, index|
arg = ["Mika", "Aki", "Mikko"] arg.each.with_index{|value, index| puts "#{index} => #{value}" }
インデックスだけ取得したい時 each_index
each_index { |index| block } → ary
arg = ["Mika", "Aki", "Mikko"] arg.each_index{|index| puts index }
使いドコロがあまり思い浮かばない
key, valueって順番に馴染みがあるので、each_with_indexのvalue, indexって順番は慣れが必要そう。
後、Rubyのループの書き方はdo ~ endで書くのと{ ... }で書くのどっちが主流な感じなんでしょうか?

- 作者: 高橋征義,後藤裕蔵,まつもとゆきひろ
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2016/02/26
- メディア: 単行本
- この商品を含むブログ (1件) を見る