キーを変更した後の結果のハッシュは、非常に難しい問題になります。結果のハッシュとその配列を簡単に調べるにはどうすればよいでしょうか?
必要なハッシュの種類を再考することをお勧めします。検索が難しく、元のハッシュ キーとの関連付けが希薄な新しいハッシュ キーを作成する代わりに、元のキーを再利用して、配列の配列を指すハッシュ キーを作成します。はるかに単純なハッシュの開始配列から始めます。
x = [
{'a' => ['a', 'b']},
{'f' => ['f', 'g']},
{'f' => ['o', 'p']}
]
コードは次のとおりです。
hash = x.each_with_object(Hash.new{ |h, k| h[k] = [] }) { |e, h|
k, v = e.flatten
h[k] << v
}
pp hash
これは出力です:
{"a"=>[["a", "b"]], "f"=>[["f", "g"], ["o", "p"]]}
ルックアップはよりシンプルになります:
hash['f'][0]
# => ["f", "g"]
hash['f'].last
# => ["o", "p"]
元の配列の分離を維持しながら、より論理的ではるかに単純なルックアップを取得します。
ハッシュに割り当てられているサブ配列の数を知る必要がある場合も簡単です。
hash['f'].size
# => 2
すべてのエントリを繰り返し処理したい場合'f'
は、設計が複雑で困難になるため、次のようにします。
hash['f'].each do |f|
...
end
また:
hash['f'].map { |f|
...
}