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

标签 ruby arrays algorithm sorting ruby-1.9.3

我有两个长度相同的数组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]

编辑

我需要就地进行(即保留 ab 的 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/

相关文章:

ruby-on-rails - 如何从 Rails 应用程序的 URI 获取文件扩展名

javascript - Ionic - 无法使用可变键推送对象

完成损坏的数据矩阵的算法

android - 以编程方式在 sqlite 数据库中搜索最佳匹配?

c# - 旅行商问题,2-opt 算法 c# 实现

ruby-on-rails - Ruby 是否缓存将评估为相同结果的方法的结果?

ruby-on-rails - Rails CANCAN - 第一次点击无访问权限

ruby-on-rails - Ruby on Rails API 命名空间作为默认路径

java - Arrays.asList 添加ArrayList而不是特定成员

arrays - Perl 中的多维数组或散列。访问项目