ネストしたhashのvalueをグルーピングしたい
[2] pry> hash2 => {nil=>{"カテゴリ未設定1"=>1}, 3=> {"王様の性別_1"=>1, "王様の性別_2"=>2, "王様の性別_3"=>3, "王様の性別_4"=>4, "王様の年収_1"=>1, "王様の年収_2"=>2, "王様の年収_3"=>3, "王様の年収_4"=>4, "王様のごはん_1"=>1, "王様のごはん_2"=>2, "王様のごはん_3"=>3, "王様のごはん_4"=>4}, 2=> {"ペットの名前_1"=>1, "ペットの名前_2"=>2, "ペットの名前_3"=>3, "ペットのご飯_1"=>1, "ペットのご飯_2"=>2, "ペットのご飯_3"=>3, "ペットの好み_1"=>1, "ペットの好み_2"=>2, "ペットの好み_3"=>3, "ペットの種類_1"=>1, "ペットの種類_2"=>2, "ペットの種類_3"=>3, "ペットの年収_1"=>1, "ペットの年収_2"=>2, "ペットの年収_3"=>3}, 4=>{"子供の洋服"=>1}}
このhashを、、、下記のような配列にしたい。8時間くらい悩んでわからなかったので、友人たち質問したらすぐに解決できた。
[カテゴリ未設定1,王様の性別_1,王様の年収_1,王様のごはん_1,...王様の性別_4,王様の年収_4,王様のごはん_4,ペットの名前_1,ペットのご飯_1,ペットの好み_1,ペットの種類_1,ペットの年収_1...ペットの名前 _3,ペットのご飯_3,ペットの好み_3,ペットの種類_3,ペットの年収_3,子供の洋服]
##回答例1
hash2.map{ |key, value| value.sort_by{ |key, value| value}.map{ |array| array[0]}}.flatten
##回答例2
hash.values.flat_map{ |value| value.sort_by{ |key, value| value }.map(&:first) }
##回答例3
hash2.inject([]){|a, (_,v)| a + v.group_by(&:last).flat_map{|_,v| v.collect(&:first)}}
みなさんすごい。
(了)