下面是PGResult集的哈希数组。
result = [
{"type" => 1 , "original" => "true", "count" => "10"},
{"type" => 1 , "original" => "false", "count" => "20"},
{"type" => 2 , "original" => "false", "count" => "30"},
{"type" => 2 , "original" => "true", "count" => "40"},
{"type" => 3 , "original" => "true", "count" => "50"},
{"type" => 3 , "original" => "false", "count" => "60"}
]
我想将上面的哈希数组处理成以下格式。 total_count =原始计数(" true") - 每种类型的原始计数(" false")!
[
{"type" => 1, "total_count" => "-10"},
{"type" => 2, "total_count" => "10"},
{"type" => 3, "total_count" => "-10"}
]
处理上述数组的任何提示?
答案 0 :(得分:2)
如下:
result = [
{"type" => 1 , "original" => "true", "count" => "10"},
{"type" => 1 , "original" => "false", "count" => "20"},
{"type" => 2 , "original" => "false", "count" => "30"},
{"type" => 2 , "original" => "true", "count" => "40"},
{"type" => 3 , "original" => "true", "count" => "50"},
{"type" => 3 , "original" => "false", "count" => "60"}
]
# will be used to extract "proper" value - positive or negative
to_value = -> (group) do
value = group["count"].to_i
group["original"] == "false" ? -value : value
end
groups = result.group_by { |h| h["type"] }
counts = groups.map do |num, group|
{ "type" => num,
"total_count" => group.map(&to_value).inject(:+) }
end
p counts
# => [{"type"=>1, "total_count"=>-10}, {"type"=>2, "total_count"=>10}, {"type"=>3, "total_count"=>-10}]
希望有所帮助!
感谢您提出更改lambda
@engineersmnky的建议!
答案 1 :(得分:1)
result.group_by {|h| h['type']}.values.map do |h1, h2|
new_hash = {"type" => h1["type"]}
new_hash["total_count"] = h1["original"] == "false" ? h1["count"].to_i - h2["count"].to_i : h2["count"].to_i - h1["count"].to_i
new_hash
end
# => [{"type"=>1, "total_count"=>10}, {"type"=>2, "total_count"=>-10}, {"type"=>3, "total_count"=>10}]