Ruby 基于第一个元素组合数组

Ruby 基于第一个元素组合数组,ruby,Ruby,我有一个数组,内部数组包含项目编号和数量: array = [[a, 4], [b, 6], [d, 4], [a, 6], [b, 8]] 我想将它们结合起来,以便每个项目只列出一次,并列出其数量之和: [[a, 10], [b, 14], [d, 4] 对我来说,最简单的方法是什么?可能的解决方案: array = [[:a, 4], [:b, 6], [:d, 4], [:a, 6], [:b, 8]] array.each_with_object(Hash.new(0)) { |(k

我有一个数组,内部数组包含项目编号和数量:

array = [[a, 4], [b, 6], [d, 4], [a, 6], [b, 8]]
我想将它们结合起来,以便每个项目只列出一次,并列出其数量之和:

[[a, 10], [b, 14], [d, 4]
对我来说,最简单的方法是什么?

可能的解决方案:

array = [[:a, 4], [:b, 6], [:d, 4], [:a, 6], [:b, 8]]
array.each_with_object(Hash.new(0)) { |(k, v), memo| memo[k] += v }
#=> {:a=>10, :b=>14, :d=>4}

您可以将结果转换为一个数组(只需调用
到a
),但对我来说,散列更适合这里。

我不清楚这与Rails有什么关系。Ruby解决方案只是:

array.group_by(&:first).map {|key, values| [key, values.sum(&:last)] }
#=> [[a, 10], [b, 14], [d, 4]]
只是出于好奇:

array.each_with_object({}) do |e, acc|
  acc.merge!([e].to_h) { |_, v1, v2| v1 + v2 }
end

我很困惑。这与Rails有什么关系?这是我正在使用的框架。但是我猜这是你说“这应该是ruby的”的方式。请阅读“包括链接页面”,以及“我们想看看你努力的证据。你试了什么?你搜过没有发现什么?你找到东西了吗,但没用?你试过写代码吗?若否,原因为何?如果是这样的话,哪一个最小的代码示例可以显示您尝试了什么以及为什么不起作用?如果没有这一点,你似乎没有试图让我们为你写这篇文章。谢谢你花时间来贡献。下次我会把我失败的尝试包括进去,这正是我想要的。我总是习惯性地使用数组,但这里的哈希显然更好,非常感谢。不要习惯性地使用数组。散列对于任何查找都更快,数组对于队列和列表也很有用,因此使用每一个数组都很重要。如果做不到这一点,将导致围绕糟糕的设计选择的复杂代码。谢谢您的回答。因为我只在使用rails时才使用ruby,所以有时候我会交换它们(我知道是错误的),并且理解这是在错误的部分。再次感谢。仅供参考-您的答案在您所说的纯ruby中不起作用,实际上是rails独有的答案。我不知道您为什么会这样想。我用纯红宝石做了测试。事实上,我甚至没有安装Rails,所以我甚至不知道它是否在Rails中工作。看来我的观点是正确的。