Упорядочить массив хэшей по имени, но хранить имена с одинаковым идентификатором вместе - PullRequest
0 голосов
/ 28 мая 2019

У меня есть следующий массив хэшей:

  [{: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"}]

Так что сортируйте имена, но идентификаторы групп вместе и сортируйте по имени,

Я пытался посмотреть на метод sort_by, но я не думаю, что он будет работать в этой ситуации?Буду признателен за любую помощь в правильном направлении.

1 Ответ

2 голосов
/ 28 мая 2019

Вы должны сгруппировать по 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"}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...