Sortieren Sie ein Array nach den Elementen eines anderen Arrays

Ich habe eine Reihe von IDs

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

und ich habe ein anderes Array von Objekten mit IDs in zufälliger Reihenfolge

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

Jetzt muss ich a2 nach der Reihenfolge der IDs in a1 sortieren. Also sollte a2 jetzt werden:

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

a1 kann [3, 2, 5, 4, 1] oder eine beliebige Reihenfolge sein, aber a2 sollte der Reihenfolge der IDs in a1 entsprechen.

Ich mag das:

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  

Dies könnte jedoch immer noch zu einer O (n ^ 2) -Zeit führen, wenn die Reihenfolge der Elemente von a2 genau umgekehrt zu a1 ist. Kann mir bitte jemand sagen, wie a2 am effizientesten sortiert wird?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage