Rails -Enumerable Group_by複数の関連付け
-
11-10-2019 - |
質問
私は彼らの多くの関係を持っていることによってオブジェクトのコレクションをグループ化したいです...このように
s.inventoryitems.group_by{|i| i.locations}
簡単にするために、これは私にこのようなものを返します:
{[1, 2, 3]=>["a"], [2]=>["b", "c"], []=>["d"]}
私はこのような結果を探しています:
{[1] => ["a"], [2] => ["a","b","c"], [3] => ["a"], [] => ["d"]}
私は物事を再構築することに取り組んでいるので、これはすべてより直感的なDB&モデルの関連指向の方法で行うことができますが、その間にこれをすぐに実装する必要があり、いくつかのルビーでそれを絞る必要があり、確信がありません。助けてくれてありがとう!
解決
このような構造をひっくり返したい場合は、これを拡張して反転させ、再グループ化する必要があります。あなたはそれを繰り返して手動で再編成するだけでこれを行うことができます:
h = { [ 1, 2, 3 ] => [ "a" ], [ 2 ] => [ "b", "c" ], [ ] => [ "d" ] }
s = { }
h.each do |keys, values|
keys.each do |key|
values.each do |value|
s[[ key ]] ||= [ ]
s[[ key ]] << value
end
end
if (keys.empty?)
s[[ ]] = values
end
end
puts s.inspect
# => {[1]=>["a"], [2]=>["a", "b", "c"], [3]=>["a"], []=>["d"]}
所属していません StackOverflow