【发布时间】:2012-02-14 15:15:41
【问题描述】:
我有两个长度相同的数组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?例如,如果a 在sort_by! 之后是
[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)
但如果可能的话,我想直接做。如果没有,我会接受已经给出的答案之一。
【问题讨论】:
-
如何定义 b 的“相同顺序”?旧索引 -> 新索引对于 b 的每个元素都等效?
-
@MarkThomas 我将其定义为具有相同的置换矩阵 (en.wikipedia.org/wiki/Permutation_matrix)。
-
您是否需要保存置换矩阵(或向量,因为它可能在这种情况下)?
-
@MarkThomas 我不需要置换矩阵。
-
现在您已经编辑了您的问题,我认为保存它可能会很有用。然后,您可以将其“应用”到 a 和 b 以保留对象 ID。既然你已经接受了一个答案,如果它对你很重要,你可以再问一个问题。
标签: ruby arrays algorithm sorting ruby-1.9.3