私はRubyが初めてです。次の値を持つ(すでにソートされた)ハッシュがあります。そこの値に基づいて、これらのキーを多次元配列に入れたいと思います。たとえば、
為に
VALUES - KEYS
acemrs - a
acemrs - b
acrs - c
acrs - d
acrs - e
aeoopstt - f
for - g
foru -h
[ [a,b] , [c,d,e] , [f] , [g] , [h] ] のような配列を探しています
私はRubyが初めてです。次の値を持つ(すでにソートされた)ハッシュがあります。そこの値に基づいて、これらのキーを多次元配列に入れたいと思います。たとえば、
為に
VALUES - KEYS
acemrs - a
acemrs - b
acrs - c
acrs - d
acrs - e
aeoopstt - f
for - g
foru -h
[ [a,b] , [c,d,e] , [f] , [g] , [h] ] のような配列を探しています
hash = {'a'=>'acemrs','b'=>'acemrs','c'=>'acrs','d'=>'acrs','e'=>'acrs','f'=>'aeoopstt','g'=>'for','h'=>'foru'}
new_hash = {}
hash.each_pair do |key, value|
(new_hash[value] ||= []) << key
end
array = new_hash.values
以前のハッシュを新しいハッシュvalues
として使用します。keys
定義されていない場合は、 new ごとに新しい配列を作成し、新しいハッシュのすべてのキーを でプッシュしkeys
ます。新しいハッシュは次のようになりますnew_hash[value] ||= []
<< key
{"aeoopstt"=>["f"], "for"=>["g"], "acemrs"=>["b", "a"], "acrs"=>["e", "d", "c"], "foru"=>["h"]}
最後に、これらの値が必要なだけnew_hash.values
で完了です。
hash.group_by{|k, v| v}.values.map(&:first)