按名称排序哈希数组,但将具有相同ID的名称保持在一起

时间:2019-05-28 13:19:06

标签: ruby-on-rails ruby

我有以下哈希数组:

  [{: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方法,但我认为在这种情况下不可行吗?在正确方向上的任何帮助将不胜感激。

1 个答案:

答案 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"}]