2011-01-13 68 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