我有一个以这种方式完成的数组
[{"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"}]]