sorting - sort.Slice 没有正确排序
问题描述
abc := []byte{'a', 'c', 'b'}
sort.Slice(abc[1:], func(i, j int) bool {
return abc[i] < abc[j]
})
fmt.Println(string(abc)) //print acb
上面的代码没有abc
正确排序。为什么?
解决方案
因为您将子切片传递abc[1:]
给排序,但在您的less()
函数中您索引abc
原始(完整)切片。sort.Slice()
将less()
根据您传递给它的切片将索引值传递给它以进行排序,并在另一个切片(原始)上使用这些索引,您将比较意外元素并将错误信息报告给sort.Slice()
.
如果您使用相同的切片,它可以工作:
sort.Slice(abc[1:], func(i, j int) bool {
return abc[1:][i] < abc[1:][j]
})
如果您在索引原始切片时手动添加偏移量,它也可以工作:
sort.Slice(abc[1:], func(i, j int) bool {
return abc[1+i] < abc[1+j]
})
当然,存储这个切片会更好、更干净、更高效:
s := abc[1:]
sort.Slice(s, func(i, j int) bool {
return s[i] < s[j]
})
试试Go Playground上的示例。
推荐阅读
- laravel - “页面已过期错误 419” - Laravel 7
- python - Bokeh TapTool 运行自定义 JS 和工具提示
- git - Git RPC 失败;curl 18 传输已关闭,剩余未完成的读取数据
- python - 是否可以在 numpy 数组中删除特定列?
- python - 为变量赋值的 Pythonic 方式 if 语句不引发异常
- azure-devops - 如何使用 Yarn 注册表作为 Azure DevOps 工件上游源?
- python - 在 Python + Selenium 中从类中的第二个 div 打印文本
- javascript - 帖子正文中缺少必需的参数 To
- regex - 正则表达式字母数字,但当它得到一个数字时,那么只有数字
- python - 如何通过numpy在每一行中加载不同数量的字符串元素