具有重复键的哈希数组中的平均值

时间:2019-02-25 18:26:40

标签: arrays ruby hash average

我有一系列哈希设置,如下所示:

array = [
  {"1" => 1, "2" => 2, "3" =>3},
  {"1" => 1, "2" => 2, "3" =>3}, 
  {"1" => 1, "2" => 2, "3" =>3}
]

例如,我正在尝试找到一种方法,用键"1"对所有哈希值取平均值。

有人可以帮忙吗?

5 个答案:

答案 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