Ты очень близко.
arr1 = [17,9,8,20,14,16]
arr2 = [27,13,10,10,24,18]
arr1, arr2 = arr1.zip(arr2).sort.transpose
#=> [[8, 9, 14, 16, 17, 20], [10, 13, 24, 18, 27, 10]]
arr1
#=> [8, 9, 14, 16, 17, 20]
arr2
#=> [10, 13, 24, 18, 27, 10]
Обратите внимание, что если arr1
содержит дубликаты, соответствующие значения в arr2
разорвут связи при сортировке.
Другой способ, если вы хотите отсортировать только по arr1
, следующий:
sorted_indices = arr1.each_index.sort_by { |i| arr1[i] }
#=> [2, 1, 4, 5, 0, 3]
arr1 = arr1.values_at(*sorted_indices)
#=> [8, 9, 14, 16, 17, 20]
arr2 = arr2.values_at(*sorted_indices)
#=> [10, 13, 24, 18, 27, 10]
См. Enumerable # sort_by и Array # values_at .