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?