Ruby - сортировка по идентификатору и группировка по дате в хэше - PullRequest
2 голосов
/ 16 октября 2019

Я немного боролся с этим и не смог получить удовлетворительный результат. У меня есть этот хэш:

{"idprj"=>13351, "prevInicioStr"=>"21/10/2019"}
{"idprj"=>14473, "prevInicioStr"=>"22/10/2019"}
{"idprj"=>14165, "prevInicioStr"=>"23/10/2019"}
{"idprj"=>14165, "prevInicioStr"=>"23/10/2019"}
{"idprj"=>14165, "prevInicioStr"=>"28/10/2019"}
{"idprj"=>14165, "prevInicioStr"=>"28/10/2019"}
{"idprj"=>14518, "prevInicioStr"=>"29/10/2019"}
{"idprj"=>14518, "prevInicioStr"=>"29/10/2019"}
{"idprj"=>13351, "prevInicioStr"=>"05/11/2019"}
{"idprj"=>14305, "prevInicioStr"=>"06/11/2019"}
{"idprj"=>14305, "prevInicioStr"=>"08/11/2019"}
{"idprj"=>14305, "prevInicioStr"=>"13/01/2020"}

И я хотел отсортировать по 'prevInicioStr' и группировать по 'idprj' (вы можете видеть, что id 13351 не сгруппирован должным образом). Чтобы получить этот результат я сделал это:

result.sort_by { |hash| [ Date.parse(hash['prevInicioStr']), hash['idprj'] ] } 

1 Ответ

2 голосов
/ 16 октября 2019

Сначала необходимо сгруппировать, а затем отсортировать (на самом деле, вы сортируете значения):

data = [{"idprj"=>13351, "prevInicioStr"=>"21/10/2019"}, {"idprj"=>14473, "prevInicioStr"=>"22/10/2019"}, {"idprj"=>14165, "prevInicioStr"=>"23/10/2019"}, {"idprj"=>14165, "prevInicioStr"=>"23/10/2019"}, {"idprj"=>14165, "prevInicioStr"=>"28/10/2019"}, {"idprj"=>14165, "prevInicioStr"=>"28/10/2019"}, {"idprj"=>14518, "prevInicioStr"=>"29/10/2019"}, {"idprj"=>14518, "prevInicioStr"=>"29/10/2019"}, {"idprj"=>13351, "prevInicioStr"=>"05/11/2019"}, {"idprj"=>14305, "prevInicioStr"=>"06/11/2019"}, {"idprj"=>14305, "prevInicioStr"=>"08/11/2019"}, {"idprj"=>14305, "prevInicioStr"=>"13/01/2020"}]
pp data.group_by { |e| e['idprj'] }
       .transform_values { |values| values.sort_by { |e| e['prevInicioStr'] } }

# {13351=>
#   [{"idprj"=>13351, "prevInicioStr"=>"05/11/2019"},
#    {"idprj"=>13351, "prevInicioStr"=>"21/10/2019"}],
#  14473=>[{"idprj"=>14473, "prevInicioStr"=>"22/10/2019"}],
#  14165=>
#   [{"idprj"=>14165, "prevInicioStr"=>"23/10/2019"},
#    {"idprj"=>14165, "prevInicioStr"=>"23/10/2019"},
#    {"idprj"=>14165, "prevInicioStr"=>"28/10/2019"},
#    {"idprj"=>14165, "prevInicioStr"=>"28/10/2019"}],
#  14518=>
#   [{"idprj"=>14518, "prevInicioStr"=>"29/10/2019"},
#    {"idprj"=>14518, "prevInicioStr"=>"29/10/2019"}],
#  14305=>
#   [{"idprj"=>14305, "prevInicioStr"=>"06/11/2019"},
#    {"idprj"=>14305, "prevInicioStr"=>"08/11/2019"},
#    {"idprj"=>14305, "prevInicioStr"=>"13/01/2020"}]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...