0

Mysql2::Resultたくさんの行が含まれているがあります。結果は、次のようにハッシュ形式でフォーマットされます。

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

私の目標は、これらすべてを繰り返し処理し、各キーの1つと、それらのカウントの合計をそのキーに関連付けられた値として持つ新しいハッシュを作成することです。

「thing_name」を繰り返して配列に入れ、.uniqそれらを実行して重複を1つのエントリにまとめることはできますが、値を関連付けて適切な計算を行う方法がわかりません。または、これをハッシュとして行う方法。

これが私がこれまでに持っているコードです:

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 に答える