Golang排序两个切片

huangapple go评论82阅读模式
英文:

Golang sort two slices

问题

我有两个整数切片,元素不一定是唯一的。

nums1 := [1,3,2,4]
nums2 := [12,47,23,1]

我想对nums1进行排序,并相应地交换nums2中的元素,即:

nums1 -> [1,2,3,4]
nums2 -> [12,23,47,1]

如果我自己进行排序,当我交换nums1的元素时,我显然可以交换nums2的元素。我想知道是否有可能在不编写自己的排序算法或依赖外部库的情况下实现这一点(使用sort包显然是可以的)。

英文:

I have two integer slices, the elements are not necessarily unique.

nums1 := [1,3,2,4]
nums2 := [12,47,23,1]

I wanted to sort nums1 and swap the elements in num2 accordingly, i.e:

nums1 -> [1,2,3,4]
nums2 -> [12,23,47,1]

If I were to do the sorting myself, I can obviously swap the nums2 elements whenever I swap the nums1 ones. I wonder if it is possible to achieve it without having writing the sort myself or depending on external libraries (using sort package is obviously okay).

答案1

得分: 3

你可以使用 sort 包中的 slice 函数。

package main

import (
	"fmt"
	"sort"
)

func main() {
	nums1 := []int{1, 3, 2, 4}
	nums2 := []int{12, 47, 23, 1}

	sort.Slice(nums1, func(i, j int) bool {
		// 检查排序条件
		cond := nums1[i] < nums1[j]
		if cond {
			nums2[i], nums2[j] = nums2[j], nums2[i]
		}
		return cond
	})

	fmt.Println("nums1:", nums1)
	fmt.Println("nums2:", nums2)
}
英文:

You can use sort package with slice function.

package main

import (
	&quot;fmt&quot;
	&quot;sort&quot;
)

func main() {
	nums1 := []int{1, 3, 2, 4}
	nums2 := []int{12, 47, 23, 1}

	sort.Slice(nums1, func(i, j int) bool {
		// Check for sorting
		cond := nums1[i] &lt; nums1[j]
		if cond {
			nums2[i], nums2[j] = nums2[j], nums2[i]
		}
		return cond
	})

	fmt.Println(&quot;nums1:&quot;, nums1)
	fmt.Println(&quot;nums2:&quot;, nums2)
}

答案2

得分: -2

这是一个O(N)的解决方案。唯一的开销是临时数组的复制。

func sortSpecial(nums1 []int, nums2 []int) {
    nums3 := make([]int, len(nums1))
    for i := 0; i < len(nums1); i++ {
        nums3[i] = nums2[nums1[i]-1]
    }
    copy(nums2, nums3)
}
英文:

Here's an O(N) solution. The only overhead is the temp array copy back.

func sortSpecial(nums1 []int, nums2 []int) {
    nums3 := make([]int, len(nums1))
    for i:= 0; i &lt; len(nums1); i++ {
        nums3[i] = nums2[nums1[i]-1]
    }
    copy(nums2,nums3)
}

huangapple
  • 本文由 发表于 2023年6月21日 10:47:55
  • 转载请务必保留本文链接:https://go.coder-hub.com/76519608.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定