我有两个长度相同的数组:

a = [a_1, a_2, ..., a_n]
b = [b_1, b_2, ..., b_n]

当我使用ab进行排序时,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]

编辑
我需要把它放在适当的位置(即,保留asort_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"]

10-08 08:18
查看更多