我有两个长度相同的数组:
a = [a_1, a_2, ..., a_n]
b = [b_1, b_2, ..., b_n]
当我使用
a
对b
进行排序时,a
的元素将按不同的顺序排列:a.sort_by!{|a_i| some_condition(a_i)}
如何按照与
sort_by!
的重新排序相同的顺序重新排序a
?例如,如果b
之后的a
是[a_3, a_6, a_1, ..., a_i_n]
然后我想要
[b_3, b_6, b_1, ..., b_i_n]
编辑
我需要把它放在适当的位置(即,保留
a
,sort_by!
的对象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"]