首页 > 解决方案 > 如何在多个哈希中按字母顺序对数组进行分组

问题描述

array = [{:id=>2922, :name=>"anil"}, {:id=>4396, :name=>"vaibav"}, {:id=>4170, :name=>"pallavi"}, {:id=>2085, :name=>"sathu"}, {:id=>3159, :name=>"sridhar"}, {:id=>4512, :name=>"sudheer"}, {:id=>4608, :name=>"henry"}, {:id=>3763, :name=>"vara"}, {:id=>3026, :name=>"sathish"}, {:id=>4099, :name=>"anu"}, {:id=>863, :name=>"anitha"}, {:id=>763, :name=>"parimala"}, {:id=>2963, :name=>"pammi"}, {:id=>2348, :name=>"pinky"}, {:id=>2268, :name=>"pooja"}, {:id=>2938, :name=>"priya"}, {:id=>4312, :name=>"venky"}, {:id=>3416, :name=>"harshitha"}, {:id=>3807, :name=>"hema"}, {:id=>2807, :name=>"hasini"}]

输出应该是:

array = [
{"A" => [{:id=>2922, :name=>"anil"}, {:id=>863, :name=>"anitha"}, {:id=>4099, :name=>"anu"}]},{"H" => [{:id=>3416, :name=>"harshitha"}, {:id=>2807, :name=>"hasini"}, {:id=>3807, :name=>"hema"},{:id=>4608, :name=>"henry"}]},
 {"P" => [{:id=>4170, :name=>"pallavi"},{:id=>2963, :name=>"pammi"},{:id=>763, :name=>"parimala"}, {:id=>2348, :name=>"pinky"}, {:id=>2268, :name=>"pooja"}, {:id=>2938, :name=>"priya"}]},
{"S" => [{:id=>2085, :name=>"sathu"}, {:id=>3159, :name=>"sridhar"}, {:id=>4512, :name=>"sudheer"}, {:id=>3026, :name=>"sathish"}]},
{"V" => [{:id=>4312, :name=>"venky"}, {:id=>4396, :name=>"vaibav"},{:id=>3763, :name=>"vara"}]}
]

标签: arraysrubysortinghashgroup-by

解决方案


array = [{:id=>2922, :name=>"anil"}, {:id=>4396, :name=>"vaibav"}, {:id=>4170, :name=>"pallavi"}, {:id=>2085, :name=>"sathu"}, {:id=>3159, :name=>"sridhar"}, {:id=>4512, :name=>"sudheer"}, {:id=>4608, :name=>"henry"}, {:id=>3763, :name=>"vara"}, {:id=>3026, :name=>"sathish"}, {:id=>4099, :name=>"anu"}, {:id=>863, :name=>"anitha"}, {:id=>763, :name=>"parimala"}, {:id=>2963, :name=>"pammi"}, {:id=>2348, :name=>"pinky"}, {:id=>2268, :name=>"pooja"}, {:id=>2938, :name=>"priya"}, {:id=>4312, :name=>"venky"}, {:id=>3416, :name=>"harshitha"}, {:id=>3807, :name=>"hema"}, {:id=>2807, :name=>"hasini"}]

代码

p [array.group_by{|x|x[:name].each_char.first}.transform_keys(&:upcase).sort_by{|k,_|k}.to_h]

输出

[{"A"=>[{:id=>2922, :name=>"anil"}, {:id=>4099, :name=>"anu"}, {:id=>863, :name=>"anitha"}], "H"=>[{:id=>4608, :name=>"henry"}, {:id=>3416, :name=>"harshitha"}, {:id=>3807, :name=>"hema"}, {:id=>2807, :name=>"hasini"}], "P"=>[{:id=>4170, :name=>"pallavi"}, {:id=>763, :name=>"parimala"}, {:id=>2963, :name=>"pammi"}, {:id=>2348, :name=>"pinky"}, {:id=>2268, :name=>"pooja"}, {:id=>2938, :name=>"priya"}], "S"=>[{:id=>2085, :name=>"sathu"}, {:id=>3159, :name=>"sridhar"}, {:id=>4512, :name=>"sudheer"}, {:id=>3026, :name=>"sathish"}], "V"=>[{:id=>4396, :name=>"vaibav"}, {:id=>3763, :name=>"vara"}, {:id=>4312, :name=>"venky"}]}]

推荐阅读