Hash#mapはHashを返さない

なんだかここ最近、これにハマっているので、備忘録的にメモ。

[1] pry(main)> h = { :aaa => "100" , :bbb => "200" , :ccc => "300" }
=> {:aaa=>"100", :bbb=>"200", :ccc=>"300"}
[2] pry(main)>

このhの値が文字列になっているのをto_iで数値にしたかったので、こう打ってみた。

[2] pry(main)> h.map{|k,v| v.to_i}
=> [100, 200, 300]
[3] pry(main)> h
=> {:aaa=>"100", :bbb=>"200", :ccc=>"300"}
[4] pry(main)> 

文字列のまんまやないか!

こんな時は、慌てず。

[4] pry(main)> h.map{|k,v| h[k] = v.to_i}
=> [100, 200, 300]
[5] pry(main)> h
=> {:aaa=>100, :bbb=>200, :ccc=>300}
[6] pry(main)> 

単にmapの中で自己代入してあげればよい。

hを壊したくなかったら、新しい配列作って、そこに入れる形にすればOK。

これで、もう、忘れてハマらないと思う。