2

オブジェクトのコレクションを、多くの関係があることでグループ化したい...このように

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とモデルの関連付け指向の方法で実行できますが、それまでの間、これをすぐに実装する必要があり、Rubyで問題を解決する必要があります。助けてくれてありがとう!

4

1 に答える 1

1

このように構造を反転させたい場合は、これを展開して反転し、再グループ化する必要があります。これは、繰り返し処理して手動で再グループ化するだけで実行できます。

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"]}
于 2011-01-13T20:34:12.610 に答える