我有一个 id 数组
a1 = [1, 2, 3, 4, 5]
我有另一个对象数组,其 id 以随机顺序排列
a2 = [(obj_with_id_5), (obj_with_id_2), (obj_with_id_1), (obj_with_id_3), (obj_with_id_4)]
现在我需要根据 a1 中 id 的顺序对 a2 进行排序。所以 a2 现在应该变成:
[(obj_with_id_1), (id_2), (id_3), (id_4), (id_5)]
a1 可能是 [3, 2, 5, 4, 1] 或任何顺序,但 a2 应对应于 a1 中 id 的顺序。
我喜欢这样:
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
但是,如果 a2 的元素顺序与 a1 完全相反,这仍然可能会遇到 O(n^2) 时间。有人可以告诉我排序a2的最有效方法吗?