Обновление одного массива хэша на основе значения ключа другого массива хэша - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть следующие два массива хэшей.Я пытаюсь удалить запись из хэша массива doctor, которого doctor_patient_id не существует в массиве doctor_patient_id массива Patient & And_doctor.

doctor = [
  { :doctor_patient_id=>"abc",
    :doctor_id=>"d1"
  },
  { :doctor_patient_id=>"def",
    :doctor_id=>"d2"
  },
  { :doctor_patient_id=>"ghi",
    :doctor_id=>"d3"
  }
]

patient_and_doctor = [
  { :patient_id=>"11e8f37477ab7028a66b210b9699def9",
    :doctor_patient_id=>[ "def", "zkj", "cps" ]
  },
  { :patient_id=>"11e8f37481fabfe68630f5da2e22dceb",
    :doctor_patient_id=>[ "uio", "ghi", "jkk" ]
  }
]

ожидаемый результат:

doctor = [
      { :doctor_patient_id=>"def",
        :doctor_id=>”d2”
      },
      { :doctor_patient_id=>"ghi",
        :doctor_id=>”d3”
      }
    ]

Я пыталсясделать что-то вроде ниже, но не повезло,

patient_and_doctor.each do |dp|
  data = doctor.map {|d| d[:doctor_patient_id].include? 
   dp[:doctor_patient_id] }
end

Как я могу добиться этого?

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Следующие могут получить требуемый ответ,

doctor.select { |x|  patient_and_doctor.map { |x| x[:doctor_patient_id] }.flatten.include?(x[:doctor_patient_id]) }
0 голосов
/ 29 ноября 2018
valid_ids = patient_and_doctor.flat_map { |h| h[:doctor_patient_id] }
# => ["def", "zkj", "cps", "uio", "ghi", "jkk"]

doctor.select { |h| valid_ids.include? h[:doctor_patient_id] }
# => [{:doctor_patient_id=>"def", :doctor_id=>"d2"},
#     {:doctor_patient_id=>"ghi", :doctor_id=>"d3"}]

используйте select! вместо select, если вы хотите изменить массив doctor вместо возврата нового.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...