0

我有一个Mysql2::Result里面有一堆行。结果被格式化为哈希,如下所示:

{"thing_name" => "email",   "count(*)" => 1000}
{"thing_name" => "email",   "count(*)" => 800}
{"thing_name" => "ads",     "count(*)" => 500}
{"thing_name" => "display", "count(*)" => 700}

我的目标是遍历所有这些并创建一个新的散列,该散列具有每个键之一,并且它们的计数总和作为与该键关联的值。

我可以成功地遍历并将“thing_name”放入一个数组中并.uniq在它们上运行以将重复项折叠到一个条目中,但我无法弄清楚如何关联这些值并对它们进行适当的数学运算。或者如何将其作为哈希来执行。

这是我到目前为止的代码:

thing_type = results.collect {|row| row["thing_name"]}
thing_type = thing_type.uniq

任何帮助将不胜感激。

4

1 回答 1

4

尝试这样的事情:

 # Provide a default value of zero for unknown keys
 counts = Hash.new { |hash,key| hash[key] = 0 }

 result.each do |row|
     counts[ row["thing_name"] ] += row["count(*)"]
 end

当您将一个块传递给时,每当您第一次尝试获取未知密钥时(例如,通过使用不存在的密钥)Hash.new,它将使用该块。counts[...] += ...Ruby 将调用您的块并将现有哈希对象和您尝试设置的键作为参数传入。

于 2012-06-25T19:11:25.333 回答