具有相同值的哈希的 Ruby 数组



我有一个以这种方式完成的数组

[{"g"=>1, "f"=>"01"}, {"g"=>2, "f"=>"02"}, {"g"=>2, "f"=>"03"}, {"g"=>3, "f"=>"04"}, {"g"=>4, "f"=>"05"}, {"g"=>4, "f"=>"06"}]

我必须分成具有相同值"g"的组,例如

[{"g"=>1, "f"=>"01"}],
[{"g"=>2, "f"=>"02"}, {"g"=>2, "f"=>"03"}],
[{"g"=>3, "f"=>"04"}],
[{"g"=>4, "f"=>"05"}, {"g"=>4, "f"=>"06"}]

我试图a.map{|a| a['g']}.uniq找到所有唯一的"g",然后对生成的数组使用each函数以将select应用于第一个数组,但没有产生任何结果。有人知道如何将数组分组划分?

input = [{"g"=>1, "f"=>"01"}, {"g"=>2, "f"=>"02"}, {"g"=>2, "f"=>"03"}, {"g"=>3, "f"=>"04"}, {"g"=>4, "f"=>"05"}, {"g"=>4, "f"=>"06"}]
grouped = input.group_by { |hash| hash["g"] }
# => {
#      1=>[{"g"=>1, "f"=>"01"}],
#      2=>[{"g"=>2, "f"=>"02"}, {"g"=>2, "f"=>"03"}],
#      3=>[{"g"=>3, "f"=>"04"}],
#      4=>[{"g"=>4, "f"=>"05"}, {"g"=>4, "f"=>"06"}]
#    }

然后,为了获得您的解决方案,您致电grouped.values

我更喜欢@Max对group_by的使用,但希望展示一种在效率上应该相似的替代方案。两者都生成哈希,然后提取其值。

arr = [{"g"=>1, "f"=>"01"}, {"g"=>2, "f"=>"02"}, {"g"=>2, "f"=>"03"},
{"g"=>3, "f"=>"04"}, {"g"=>4, "f"=>"05"}, {"g"=>4, "f"=>"06"}]
arr.each_with_object({}) { |f,h| (h[f["g"]] ||= []) << f }.values
#=> [[{"g"=>1, "f"=>"01"}],
#    [{"g"=>2, "f"=>"02"}, {"g"=>2, "f"=>"03"}],
#    [{"g"=>3, "f"=>"04"}], 
#    [{"g"=>4, "f"=>"05"}, {"g"=>4, "f"=>"06"}]]

最新更新