Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 平均嵌入ruby哈希中的值_Ruby On Rails_Ruby_Arrays_Hash - Fatal编程技术网

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] }]