gpt4 book ai didi

arrays - 对两个索引同步(配对)数组进行排序时,如何维护索引?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:33:18 25 4
gpt4 key购买 nike

我有两个数组,我需要将索引对放在一起:

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]

参见 Enumerable#sort_byArray#values_at .

关于arrays - 对两个索引同步(配对)数组进行排序时,如何维护索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55770880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com