在go中排序uint64切片

ufk*_*ufk 21 go slice

我正在使用Go 1.7rc3编写Go应用程序.

我有一片uint64(var dirRange []uint64),我想排序.

sort包有一个功能,sort.Ints()但它需要[]int和我一样[]uint64.

我该怎么办?我可以输入所有切片吗?

谢谢

vic*_*azo 33

从1.8版开始,您可以使用更简单的功能sort.Slice.在您的情况下,它将类似于以下内容:

sort.Slice(dirRange, func(i, j int) bool { return dirRange[i] < dirRange[j] })
Run Code Online (Sandbox Code Playgroud)

这避免了必须为排序定义任何类型.

  • 我不能自己进行编辑,因为它少于6个字符,但是您作为Slice的第二个参数,比较函数需要声明索引参数“ i”和“ j”。 (3认同)

abh*_*ink 11

您可以sort.Interface在您的上面定义dirRange,可以是类型别名[]uint64:

type DirRange []uint64

func (a DirRange) Len() int           { return len(a) }
func (a DirRange) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }
func (a DirRange) Less(i, j int) bool { return a[i] < a[j] }

func main() {
    dirRange := DirRange{2, 5, 7, 1, 9, 4}
    sort.Sort(dirRange)
    fmt.Println(dirRange)   
}
Run Code Online (Sandbox Code Playgroud)

输出:

[1 2 4 5 7 9]
Run Code Online (Sandbox Code Playgroud)

这样您就可以避免直接投射并直接使用数组.由于基础类型是切片[]uint64,您仍然可以使用常规切片操作.例如:

dirRange := make(DirRange, 10)
dirRange = append(dirRange, 2)
Run Code Online (Sandbox Code Playgroud)