[英]Efficient way to find average of values in an array of hashes grouping by another value
I'm collecting some data using some API calls.我正在使用一些 API 调用来收集一些数据。 Now I have this data
现在我有这个数据
data = [
{:energyCons=>0.64, :energyCons100=>64, :energyClass=>"B"},
{:energyCons=>0.64, :energyCons100=>64, :energyClass=>"B"},
{:energyCons=>0.64, :energyCons100=>64, :energyClass=>"B"},
{:energyCons=>0.64, :energyCons100=>64, :energyClass=>"B"},
{:energyCons=>0.64, :energyCons100=>64, :energyClass=>"B"}
]
I need to group by energyClass
and then get the average for energyCons
and energyCons100
我需要按
energyClass
,然后得到energyCons
和energyCons100
的平均值
Basically, I need a simple array with基本上,我需要一个简单的数组
["B": {energyCons: 0.74, energyCons100: 82}, "C": {energyCons: 0.74, energyCons100: 82}.... ]
where the key is the energy class I group and the value is a hash with the two averages.其中关键是能量 class I 组,值是具有两个平均值的 hash。
I can do that but only with multiple loops, is there any compact way?我可以做到这一点,但只能使用多个循环,有什么紧凑的方法吗?
You could first group data
by every element's energyClass
value and then do the proper calculation;您可以先按每个元素的
energyClass
值对data
进行分组,然后进行适当的计算;
data
.group_by { |d| d[:energyClass] }
.transform_values do |values|
{
energyCons: values.sum { |v| v[:energyCons] } / values.size,
energyCons100: values.sum { |v| v[:energyCons100] } / values.size
}
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.