ハッシュからeach_with_indexでkeyとvalとindexを取り出す。

ハッシュにeach_with_indexを使う場合は |(key,val),i| を覚えておくといい。

下記のようなハッシュオブジェクトで、each_with_indexを使う場合、

desserts = {
  "a" => "apple pie",
  "b" => "baumkuchen",
  "c" => "chocolate cake"}

obj.each_with_index do |obj,i| で各要素とインデックスを同時に取り出すことができるが、要素(obj)のハッシュオブジェクトは配列に変換されてしまう。

desserts.each_with_index do |obj,i|
  =i
  =dessert
  =dessert.class
  =","
end

>> 0 ["a", "apple pie"] Array , 1 ["b", "baumkuchen"] Array , 2 ["c", "chocolate cake"] Array

ハッシュオブジェクトでなくなった要素のkeyとvalに指定した値を取り出すには、配列のインデックスをいちいち指定するしかないのか??

desserts.each_with_index do |obj,i|
  =i
  =dessert[0]
  =dessert[1]
  =","
end

>> 0 "a" "apple pie" , 1 "b" "baumkuchen" , 2 "c" "chocolate cake" ,

と思っていたが、下記のように |(key,val),i| のような書き方ができる。

desserts.each_with_index do |(key,val),i|
  =i
  =key
  =val
  =","
end

>> 0 "a" "apple pie" , 1 "b" "baumkuchen" , 2 "c" "chocolate cake" ,