我有两个长度相同的数组a
, b
:
a = [a_1, a_2, ..., a_n]
b = [b_1, b_2, ..., b_n]
当我使用 sort_by!
对 a
进行排序时,a
的元素将以不同的顺序排列:
a.sort_by!{|a_i| some_condition(a_i)}
如何以与 a
重新排序相同的顺序/重新排列来重新排序 b
?例如,如果 sort_by!
之后的 a
是
[a_3, a_6, a_1, ..., a_i_n]
那我要
[b_3, b_6, b_1, ..., b_i_n]
编辑
我需要就地进行(即保留 a
、b
的 object_id)。到目前为止给出的两个答案是有用的,给定排序数组:
a_sorted
b_sorted
我可以
a.replace(a_sorted)
b.replace(b_sorted)
但如果可能的话,我想直接去做。如果没有,我将接受已经给出的答案之一。
最佳答案
一种方法是将两个数组压缩在一起并同时对它们进行排序。也许是这样的?
a = [1, 2, 3, 4, 5]
b = %w(a b c d e)
a,b = a.zip(b).sort_by { rand }.transpose
p a #=> [3, 5, 2, 4, 1]
p b #=> ["c", "e", "b", "d", "a"]
关于ruby - 以与另一个数组重新排序相同的顺序重新排序数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8934928/