Сортировать массив по элементам другого массива

У меня есть массив идентификаторов

a1 = [1, 2, 3, 4, 5]  

и у меня есть еще один массив объектов с идентификаторами в случайном порядке

a2 = [(obj_with_id_5), (obj_with_id_2), (obj_with_id_1), (obj_with_id_3), (obj_with_id_4)]  

Теперь мне нужно отсортировать a2 по порядку идентификаторов в a1. Таким образом, a2 теперь должен стать:

[(obj_with_id_1), (id_2), (id_3), (id_4), (id_5)]  

a1 может быть [3, 2, 5, 4, 1] или в любом порядке, но a2 должен соответствовать порядку идентификаторов в a1.

Я делаю так:

a1.each_with_index do |id, idx|
  found_idx = a1.find_index { |c| c.id == id }
  replace_elem = a2[found_idx]
  a2[found_idx] = a2[idx]
  a2[idx] = replace_elem
end  

Но это все еще может столкнуться с O (n ^ 2) раз, если порядок элементов a2 точно противоположен a1. Может кто-нибудь подскажите, пожалуйста, самый эффективный способ сортировки а2?

Ответы на вопрос(4)

Ваш ответ на вопрос