Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.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 用加法合并散列数组_Ruby - Fatal编程技术网

Ruby 用加法合并散列数组

Ruby 用加法合并散列数组,ruby,Ruby,我有一个哈希数组 hash = [{"user"=>"10910", "count"=>"2"}, {"user"=>"10910", "count"=>"8"}, {"user"=>"10910", "count"=>"4"}, {"user"=>"11245", "count"=>"3"}, {"user"=>"10910", "count"=>"2"}, {"user"=>"10910", "count"=>"

我有一个哈希数组

hash = [{"user"=>"10910", "count"=>"2"},
{"user"=>"10910", "count"=>"8"}, 
{"user"=>"10910", "count"=>"4"}, 
{"user"=>"11245", "count"=>"3"}, 
{"user"=>"10910", "count"=>"2"}, 
{"user"=>"10910", "count"=>"7"}, 
{"user"=>"11245", "count"=>"2"}, 
{"user"=>"10910", "count"=>"1"}, 
{"user"=>"13869", "count"=>"2"}]
我试图找到一种方法将其合并到一个新的哈希数组中,其中每个用户只出现一次,计数是以前与该用户关联的所有计数的总和

上述操作应导致以下哈希:

newhash = [{"user"=>"10910", "count"=>"24"},
{"user"=>"11245", "count"=>"5"}, 
{"user"=>"13869", "count"=>"2"}]

我尝试了一个很长很复杂的方法,只是在上面循环了很多次来组合散列,但我无法让它工作。一定有更好更简单的方法

我会这样写:

hash
.to_enum.with_object(Hash.new(0)){|e, h| h[e["user"]] += e["count"].to_i}
.map{|k, v| {"user" => k, "count" => v.to_s}}
hash = [{"user"=>"10910", "count"=>2},
{"user"=>"10910", "count"=>8}, 
{"user"=>"10910", "count"=>4}, 
{"user"=>"11245", "count"=>3}, 
{"user"=>"10910", "count"=>2}, 
{"user"=>"10910", "count"=>7}, 
{"user"=>"11245", "count"=>2}, 
{"user"=>"10910", "count"=>1}, 
{"user"=>"13869", "count"=>2}]

merged = Hash.new { |h, k| h[k] = {"user" => k, "count" => 0} }
hash.each { |x| merged[x["user"]]["count"] += x["count"] }

newhash = merged.values

我会这样做

grouped = hash.group_by{|h| h['user']}
grouped.map do |user_id, user| 
  total = user.reduce(0) { |sum, h| sum+=h['count'].to_i }
  {'user'=> user_id, 'count'=> total.to_s}
end

请向我们展示您的长复杂方法。谢谢!这真的很好用。它有多短给我留下了深刻的印象。
hash.to_enum.with_object…
而不是
hash.each_with_object…
?您会选择
hash
作为数组的名称吗?@CarySwoveland OP将数组分配给变量
hash
。但这是一种误导。至于不使用带有对象的每个对象,我喜欢分解的对象。