go - sort.Sort 不修改数组

标签 go

下面的代码应该创建一个整数数组 (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 参数的支持数组是您要修改的数组。

Run it on the playground .

关于go - sort.Sort 不修改数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56729009/

相关文章:

go - 如何在 yocto 构建的 Cstom 配方中包含文件

go - 无法生成覆盖

戈朗 : declare a single constant

go - 测试Golang导入的函数被调用?

math - Golang 游学平方根

go - 无法再在 golang 中加载包

performance - Golang slice 追加 vs 分配性能

go - 如何将本地目录中的包包含到 main.go 中

json - 解码动态 JSON,忽略已知字段

unit-testing - 在 Golang 中测试文件系统的示例代码