因为传递了abc[1:]
子 slice 进行排序,但是在less()
函数中,您为abc
原始(完整) slice 建立了索引。 sort.Slice()
将根据传递给它的 slice 的索引将索引值传递给less()
,并使用另一个 slice (原始)上的索引,比较意外元素并将错误信息报告给sort.Slice()
。
如果使用相同的 slice ,则可以使用:
sort.Slice(abc[1:], func(i, j int) bool {
return abc[1:][i] < abc[1:][j]
})
如果在索引原始 slice 时手动添加偏移量,它也可以工作:
sort.Slice(abc[1:], func(i, j int) bool {
return abc[1+i] < abc[1+j]
})
当然,存储此 slice 会更好,更清洁且效率更高:
s := abc[1:]
sort.Slice(s, func(i, j int) bool {
return s[i] < s[j]
})
尝试在
Go Playground上的示例。