猿问

Golang Sort 包 - 模糊排序错误

我尝试修改标准排序方法,并在排序 Less 界面中添加一定的随机性。什么时候

if (u[i] - u[j]) <= 0

或者

if u[i] < u[j]

它按预期工作但是

if (u[i] - u[j]) <= rv

panic: runtime error: index out of range


goroutine 1 [running]:

panic(0x176ba0, 0x1040a010)

    /usr/local/go/src/runtime/panic.go:464 +0x700

main.FuzzySorter.Less(0x10456000, 0x9f, 0x9f, 0x19, 0xffffffff, 0x4, 0x1, 0xd)

    /tmp/sandbox201242525/main.go:21 +0x140

main.(*FuzzySorter).Less(0x10434140, 0x19, 0xffffffff, 0x5c, 0x1, 0x10434140)

    <autogenerated>:3 +0xc0

sort.doPivot(0xfef741b0, 0x10434140, 0x19, 0x9f, 0x7, 0x19)

    /usr/local/go/src/sort/sort.go:128 +0x280

sort.quickSort(0xfef741b0, 0x10434140, 0x19, 0x9f, 0xe, 0xfef741b0)

    /usr/local/go/src/sort/sort.go:195 +0xa0

sort.Sort(0xfef741b0, 0x10434140)

    /usr/local/go/src/sort/sort.go:229 +0x80

main.FuzzySorter.Sort(0x10456000, 0x9f, 0x9f, 0x1, 0x0, 0x0, 0x0, 0x1777a0)

    /tmp/sandbox201242525/main.go:29 +0xa0

main.main()

    /tmp/sandbox201242525/main.go:195 +0xc0


MMMHUHU
浏览 277回答 2
2回答

慕尼黑的夜晚无繁华

从 Go 1.8 开始,有一种更简单的方法可以对切片进行排序,而无需您定义新类型。您只需创建一个 Less(匿名)lambda。a := []int{5, 3, 4, 7, 8, 9}sort.Slice(a, func(i, j int) bool {&nbsp; &nbsp; return a[i] < a[j]})for _, v := range a {&nbsp; &nbsp; fmt.Println(v)}这将按升序排序,如果你想要相反的,只需写 a[i] < a[j]

天涯尽头无女友

据我所知,Go 排序实现需要两个负面比较,例如。Less(i, j)并且Less(j, i)两者都返回 false,它将其视为相等,但不是正数。例如Less(i, j),Less(j, i)不能都返回真。因此,您可以轻松地以逻辑正确和确定性的方式获得所需的结果,只需if (u[i] - u[j]) < -1 {&nbsp; &nbsp; &nbsp; &nbsp; return true&nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; return false&nbsp; &nbsp; }https://play.golang.org/p/VcKI9uzcM9
随时随地看视频慕课网APP

相关分类

Go
我要回答