Как удалить ха sh из массива хэшей на основе условия в Ruby - PullRequest
0 голосов
/ 09 февраля 2020

У меня есть массив хэшей:

a = [{'id'=> '1', 'subject'=> 'this is subject 1', 'orig_id'=> 123, 'parent_id'=> 123}, 
     {'id'=> '2', 'subject'=> 'this is subject 2', 'orig_id'=> 456, 'parent_id'=> 123},
     {'id'=> '3', 'subject'=> 'this is subject 3', 'orig_id'=> 789, 'parent_id'=> 980}]

Я хочу отфильтровать его, исходя из условия, что если parent_id одного объекта равно orig_id или parent_id из затем другой объект сохранит первый объект ha sh и удалит другой.

Из приведенного выше сценария будет удален второй объект ha sh и будет получен результат:

a = [{'id'=> '1', 'subject'=> 'this is subject 1', 'orig_id'=> 123, 'parent_id'=> 123}, 
     {'id'=> '3', 'subject'=> 'this is subject 3', 'orig_id'=> 789, 'parent_id'=> 980}]

1 Ответ

1 голос
/ 09 февраля 2020

Сгруппируйте по parent_id и , чтобы определить правильный, иначе верните все сгруппированных хэшей.

a.
  group_by { |h| h["parent_id"] }.
  flat_map do |id, hs|
    hs.find { |h| h["orig_id"] == id } || hs
  end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...