Ruby on rails 平均嵌入ruby哈希中的值
我有一个嵌入的散列,我需要计算平均值。我已经成功地对它们进行了分组(从未分组中),但找到平均值对我来说不起作用 下面是散列数据的示例Ruby on rails 平均嵌入ruby哈希中的值,ruby-on-rails,ruby,arrays,hash,Ruby On Rails,Ruby,Arrays,Hash,我有一个嵌入的散列,我需要计算平均值。我已经成功地对它们进行了分组(从未分组中),但找到平均值对我来说不起作用 下面是散列数据的示例 myhash = {"2011-02-15"=>[["2011-02-15", 10], ["2011-02-15", 60]], "2011-02-22"=>[["2011-02-22", 22]], "2011-02-28"=>[["2011-02-28", 110],["2011-02-28",
myhash = {"2011-02-15"=>[["2011-02-15", 10], ["2011-02-15", 60]],
"2011-02-22"=>[["2011-02-22", 22]],
"2011-02-28"=>[["2011-02-28", 110],["2011-02-28", 70]]}
下面是我如何将它们分组的(它们过去只是{k=>v}未分组)
我从这个线程()尝试了两种解决方案,但都不起作用
好问题。我希望结果是按日期平均的,这样我就可以用这种方式提供它们了
[{"2012-02-15" => 35"}, {"2012-02-22" => 22"}, {"2012-02-28" => 90"}]
在rails中,
Array
类有一个sum
方法。您可以按如下方式使用它:
方法1
{}.tap{ |h| myhash.each{ |date, list| h[date] = list.sum(&:last)/list.size}
方法2
Hash[myhash.map{ |date, list| [date, list.sum(&:last)/list.size] }]
如何定义一组字符串的平均值?你希望结果是什么?哇。你能解释一下inject在这种情况下是如何工作的吗?我认为应该是一个对象和一个块。@ismaelga
inject
可以在每个值之间为要“inject”的方法使用一个符号,在memo
上使用当前元素调用该方法。所以inject(:+)
被扩展为inject{| memo,obj | memo.+(obj)}
。当您不给inject
一个初始值时,它只使用第一个元素。这些书值得一读。:)。我确实读过,但我不明白。谢谢你的解释。但是在这种情况下,它与reduce(:+)
有什么不同呢?@ismaelga没有区别,所以使用一种方法而不是另一种方法只是偏好。哦,谢谢Andrew,这很有意义。我想这只是对语义的补充
{}.tap{ |h| myhash.each{ |date, list| h[date] = list.sum(&:last)/list.size}
Hash[myhash.map{ |date, list| [date, list.sum(&:last)/list.size] }]