重新排序以与另一个数组相同的顺序重新排序数组

saw*_*awa 3 ruby arrays sorting algorithm ruby-1.9.3

我有两个阵列a,b相同长度的:

a = [a_1, a_2, ..., a_n]
b = [b_1, b_2, ..., b_n]
Run Code Online (Sandbox Code Playgroud)

当我a使用排序时sort_by!,元素a将按不同的顺序排列:

a.sort_by!{|a_i| some_condition(a_i)}
Run Code Online (Sandbox Code Playgroud)

如何重新排序b与重新排序相同的顺序/重新排列a?例如,如果a以后sort_by!就是

[a_3, a_6, a_1, ..., a_i_n]
Run Code Online (Sandbox Code Playgroud)

然后我想要

[b_3, b_6, b_1, ..., b_i_n]
Run Code Online (Sandbox Code Playgroud)

编辑

我需要做的很到位(即,保留的OBJECT_ID a,b).鉴于已排序的数组,到目前为止给出的两个答案是有用的:

a_sorted
b_sorted
Run Code Online (Sandbox Code Playgroud)

我可以

a.replace(a_sorted)
b.replace(b_sorted)
Run Code Online (Sandbox Code Playgroud)

但如果可能的话,我想直接做.如果没有,我会接受已经给出的答案之一.

Pau*_*dge 10

一种方法是将两个阵列压缩在一起并同时对它们进行排序.也许是这样的事情?

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"]
Run Code Online (Sandbox Code Playgroud)