我有一系列哈希设置,如下所示:
array = [
{"1" => 1, "2" => 2, "3" =>3},
{"1" => 1, "2" => 2, "3" =>3},
{"1" => 1, "2" => 2, "3" =>3}
]
例如,我正在尝试找到一种方法,用键"1"
对所有哈希值取平均值。
有人可以帮忙吗?
答案 0 :(得分:4)
如今,数组有一个sum
方法,需要一个代码块。基本上,它将块返回的值相加:
array = [{"1" => 0, "2" => 2, "3" =>3}, {"1" => 1, "2" => 4, "3" =>6}, {"1" => 2, "2" => 6, "3" =>9}]
array.sum{|h| h['1']}.fdiv(array.size)
答案 1 :(得分:2)
考虑到Ruby版本,yield_self(当时为别名)可能有效:
[{ "1" => 10, "2" => 2, "3" =>3 },
{ "1" => 43, "2" => 2, "3" =>3 },
{ "1" => 4, "2" => 2, "3" =>3 }].map { |hash| hash.fetch('1', 0) }.then { |arr| arr.sum.fdiv(arr.size) }
# 19.0
(10 + 43 + 4) / 3 = 19.0
不是您的示例,而不仅仅是1 + 1 + 1。
答案 2 :(得分:0)
我会做这样的事情:
log.info("the date is: "+ dateFormat.format(currentDate));
在此示例中, array = [{"1" => 1, "2" => 2, "3" =>3},{"1" => 1, "2" => 2, "3" =>3},{"1" => 1, "2" => 2, "3" =>3}]
array.map { |hash| hash['1'] }.inject { |sum, el| sum + el }.to_f / array.size
#=> 1.0
使用键array.map { |hash| hash['1'] }
('1'
)提取所有元素的值。然后[1,1,1]
计算平均值。
答案 3 :(得分:0)
给出数组(为了方便调试,我更改了值):
array = [{"1" => 0, "2" => 2, "3" =>3}, {"1" => 1, "2" => 4, "3" =>6}, {"1" => 2, "2" => 6, "3" =>9}]
此代码将每个键映射到值的平均值:
array.each_with_object(Hash.new{ |k,v| k[v] = [ ]}) { |h, hh| h.each { |k,v| hh[k] << v } }.transform_values { |k| k.sum.to_f/k.size }
#=> {"1"=>1.0, "2"=>4.0, "3"=>6.0}
答案 4 :(得分:0)
vim