我有一组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的最有效方法吗?