【发布时间】:2017-06-14 09:03:05
【问题描述】:
我在这篇文章中看到了这段代码,因为我正在尝试根据某些标准对哈希数组中的值求和。
Rails sum values in an array of hashes
array = [
{loading: 10, avg: 15, total: 25 },
{loading: 20, avg: 20, total: 40 },
{loading: 30, avg: 25, total: 55 }
]
sum = Hash.new(0)
array.each_with_object(sum) do |hash, sum|
hash.each { |key, value| sum[key] += value }
end
# => {:loading=>60, :avg=>60, :total=>120}
我正在尝试做但我不知道怎么做,如果加载和平均在这个数组中多次出现相同的值,则对总键求和。例如。
array = [
{loading: 10, avg: 15, total: 25 },
{loading: 20, avg: 20, total: 40 }, # See here
{loading: 30, avg: 25, total: 55 },
{loading: 20, avg: 20, total: 80 }, # See here
{loading: 10, avg: 20, total: 46 }
]
结果是:
[
{loading: 10, avg: 15, total: 25 },
{loading: 20, avg: 20, total: 120 }, # Results in this
{loading: 30, avg: 25, total: 55 },
{loading: 10, avg: 20, total: 46 }
]
我试图修改这一行
hash.each { |key, value| sum[key] += value }
添加一个条件来检查值是否重复但我没有成功。
欢迎任何帮助、想法或任何事情。
【问题讨论】:
-
我希望您认为在
**中包含一些哈希值会对读者有所帮助,但我只是觉得它令人困惑。如果没有“嘿,看这里”,你想做什么就很清楚了。更一般地说,在给出示例时,所有输入都应该是有效的 Ruby 对象(没有**,没有etc.,没有...)。除其他外,它允许读者简单地剪切和粘贴您的代码,而无需进行后续编辑。值得称赞的是,您为数组分配了一个变量(array = [...),因此读者可以参考array而无需定义它。许多提问者将输入无名,这是一个小麻烦。