arrays - 如何在多个哈希中按字母顺序对数组进行分组
问题描述
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"}]}
]
解决方案
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"}]}]
推荐阅读
- node.js - nodejs中有没有办法将geotiff转换为PNG(使用gdal_translate?)
- python - 如何获取网站所有页面中表格的所有数据?
- mapbox - 如何在一条线上显示距离标记(Mapbox-gl)?
- javascript - 如何连接两个数组并以相同的方式部署它们但使用字符串值?
- ios - 无法使用 xcode 10.1 加载底层框架
- javascript - 使用 div 更改 Active Slick Carousel
- c# - 传送工作时移动系统不工作,移动工作时传送不工作
- ros - 错误:无法启动类型 [msf_updates/pose_sensor] 的节点:无法在包 [msf_updates] 中找到节点 [pose_sensor]
- c# - 将带有未知标头的 csv 反序列化为列表或数组
- gitlab - 如何重置/清理 GitLab 存储库