2011-01-13 101 views
2

我想按他們有很多關係對象的集合......這樣導軌 - 可枚舉GROUP_BY多個關聯

s.inventoryitems.group_by{|i| i.locations} 

爲了簡單起見,這將返回我是這樣的:

{[1, 2, 3]=>["a"], [2]=>["b", "c"], []=>["d"]} 

我正在尋找這樣雖然結果:

{[1] => ["a"], [2] => ["a","b","c"], [3] => ["a"], [] => ["d"]} 

我上restruc工作所有這些都可以通過更直觀的DB &模型關聯導向的方式來完成,但同時我需要立即實現它,並且需要用一些Ruby來對其進行爭論,並且我不確定。謝謝你的幫助!

+0

你最終提出了一種更直觀的方法嗎?我正在做類似的事情,尋找靈感。 – slothbear 2014-05-22 16:39:17

回答

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"]} 
+0

謝謝!我需要這正是我需要做的。 – blastula 2011-01-17 15:20:52