我有以下哈希数组:
[{:name=>"Albert", :id=>"1"},
{:name=>"Billy", :id=>"3"},
{:name=>"Carol", :id=>"4"},
{:name=>"Dennis", :id=>"2"},
{:name=>"Ellen", :id=>"1"},
{:name=>"Frank", :id=>"5"},
{:name=>"Gerald", :id=>"3"}]
我需要排序并得出以下结果:
[{:name=>"Albert", :id=>"1"},
{:name=>"Ellen", :id=>"1"},
{:name=>"Billy", :id=>"3"},
{:name=>"Gerald", :id=>"3"}
{:name=>"Carol", :id=>"4"},
{:name=>"Dennis", :id=>"2"},
{:name=>"Frank", :id=>"5"}]
因此对名称进行排序,但将组ID一起按名称进行排序。
我尝试查看sort_by
方法,但我认为在这种情况下不可行吗?在正确方向上的任何帮助将不胜感激。
答案 0 :(得分:2)
您应按id
分组,然后按第一个哈希值name
排序。
input.group_by { |h| h[:id] }.
values.
sort_by { |a| a.first[:name] }.
flatten
#⇒ [{:name=>"Albert", :id=>"1"},
# {:name=>"Ellen", :id=>"1"},
# {:name=>"Billy", :id=>"3"},
# {:name=>"Gerald", :id=>"3"},
# {:name=>"Carol", :id=>"4"},
# {:name=>"Dennis", :id=>"2"},
# {:name=>"Frank", :id=>"5"}]