猿问

sort.Sort 不修改数组

以下代码应创建一个 ints ( ) 数组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.

为什么这不起作用?


LEATH
浏览 112回答 1
1回答

PIPIONE

问题在于 Swap 方法正在更改参数数组,而不是调用者中的数组。通过将 byNum 声明为切片来修复:type&nbsp;byNum&nbsp;[]int ... sort.Sort(byNum(a[:]))在此调用中,切片参数的支持数组是您要修改的数组。在操场上运行它。
随时随地看视频慕课网APP

相关分类

Go
我要回答