下面的代码应该创建一个整数数组 (a
) 并对它进行排序,但是 sort.Sort 似乎没有修改变量。
package main
import (
"fmt"
"sort"
)
type IntArray [5]int
type byNum [5]int
func (s byNum) Len() int {
return len(s)
}
func (s byNum) Swap(i, j int) {
s[i], s[j] = s[j], s[i]
}
func (s byNum) Less(i, j int) bool {
return s[i] < s[j]
}
func main() {
a := IntArray{5,3,4,1,2}
fmt.Println(a)
sort.Sort(byNum(a))
fmt.Println(a)
}
https://play.golang.org/p/bhcwgosqvis
[5 3 4 1 2]
[5 3 4 1 2]
Program exited.
为什么这不起作用?
最佳答案
问题在于 Swap 方法正在更改参数数组,而不是调用方中的数组。
通过将 byNum 声明为 slice 来修复:
type byNum []int
...
sort.Sort(byNum(a[:]))
在此调用中, slice 参数的支持数组是您要修改的数组。
关于go - sort.Sort 不修改数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56729009/