У меня есть два массива a
, b
тех же длины:Переупорядочение массива в том же порядке, как другой массив был кондиционирован
a = [a_1, a_2, ..., a_n]
b = [b_1, b_2, ..., b_n]
Когда я вроде a
использования sort_by!
, элементы a
будут расположены в разном заказ:
a.sort_by!{|a_i| some_condition(a_i)}
Как я могу изменить порядок b
в том же порядке/перегруппировки как переназначения a
? Например, если a
после sort_by!
является
[a_3, a_6, a_1, ..., a_i_n]
я хочу
[b_3, b_6, b_1, ..., b_i_n]
Редактировать
мне нужно сделать это на месте (то есть сохраняют object_id из a
, b
) , Два ответы, приведенные до сих пор является полезным в том, что, учитывая отсортированные массивы:
a_sorted
b_sorted
я могу сделать
a.replace(a_sorted)
b.replace(b_sorted)
, но если это возможно, я хочу сделать это непосредственно. Если нет, я соглашусь с одним из уже полученных ответов.
Как вы определяете «тот же порядок» для b? Старый индекс -> новый индекс эквивалентен для каждого элемента b? –
@MarkThomas Я определяю его как имеющую одну и ту же матрицу перестановок (http://en.wikipedia.org/wiki/Permutation_matrix). – sawa
Вам нужно сохранить матрицу перестановок (или вектор, как это может быть в этом случае)? –