【问题标题】:Rails - Enumerable Group_By multiple associationsRails - Enumerable Group_By 多个关联
【发布时间】:2011-06-08 17:44:17
【问题描述】:

我想按对象的许多关系对它们进行分组......就像这样

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

为了简单起见,这会返回如下内容:

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

我正在寻找这样的结果:

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

我正在努力重组事物,因此这一切都可以以一种更直观的面向数据库和模型关联的方式完成,但与此同时,我需要立即实现它,并且需要用一些 Ruby 来解决它,我不确定。感谢您的帮助!

【问题讨论】:

  • 你最终有没有想出更直观的方法?我正在做类似的事情并寻找灵感。

标签: ruby-on-rails hash group-by has-many enumerable


【解决方案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"]}

【讨论】:

  • 谢谢!我需要这正是我需要做的。
猜你喜欢
  • 1970-01-01
  • 2014-08-14
  • 2015-02-12
  • 2021-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-09
相关资源
最近更新 更多