Rails – Enumerable 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"]} 

我正在努力重组事情所以这一切都可以用更直观的DB和模型关联方式完成,但与此同时我需要立即实现这个并且需要用一些Ruby来解决它并且我不确定。 谢谢你的帮助!

你需要扩展它,反转它,并重新组合它,如果你想翻转这样的结构。 您可以通过迭代并手动重新组合来完成此操作:

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