我有两个数组,我需要将索引对保持在一起:
arr1 = [17,9,8,20,14,16]
arr2 = [27,13,10,10,24,18]
我想把他们两个都归还:
arr1 = [8,9,14,16,17,20]
arr2 = [10,13,24,18,27,10]
我试过arr1.each.zip(arr2.each).sort
给了我:[[8, 10], [9, 13], [14, 24], [16, 18], [17, 27], [20, 10]]
。我希望有一种更快的方式来维护阵列。
然后我继续使用transpose
,它让我得到了我的嵌套数组,但是我似乎无法让地图正确修复我的原始数组。
arr1.each.zip(arr2.each).sort.transpose.map {
|a_1| a1.map { |a_2| arr1 = a_1; arr2 = a_2 }
}
我也觉得应该有更简单的时间和空间复杂的解决方案。
你很近。
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]