以下代码应创建一个int数组(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作为切片:

type byNum []int

...

sort.Sort(byNum(a[:]))

在此调用中,slice参数的后备数组是要修改的数组。

在操场上跑吧