sorting - 按数字和字母顺序对基于结构的切片进行排序
问题描述
我有一片这样的结构
type Interval struct{
number float64
coordinate string
}
var data []Interval
假设数据如下
[]Interval{
Interval{
number: 1,
coordinate: "x",
},
Interval{
number: 8,
coordinate: "y",
},
Interval{
number: 2,
coordinate: "x",
},
Interval{
number: 5,
coordinate: "y",
},
Interval{
number: 5,
coordinate: "x",
},
Interval{
number: 6,
coordinate: "y",
},
Interval{
number: 3,
coordinate: "x",
},
Interval{
number: 7,
coordinate: "y",
},
}
我的问题是如何按number
and对其进行排序coordinate
?
我尝试过使用以下排序方法,但这并不符合我的预期
// sort method that I use
sort.Slice(data, func(i, j int) bool {
return data[i].number < data[j].number
})
结果:
[{1 x} {2 x} {3 x} {5 y} {5 x} {6 y} {7 y} {8 y}]
期待:
[{1 x} {2 x} {3 x} {5 x} {5 y} {6 y} {7 y} {8 y}]
差异:
{5 y} {5 x}
应该是{5 x} {5 y}
提示:我的预期结果与python的函数相似sort
非常感谢任何帮助
解决方案
您的比较器函数不会coordinate
在情况属性number
相等的情况下比较属性。因此,如果排序算法不稳定,{5, x} 和 {5, y} 的位置可能是不确定的。
这是比较器功能的更新版本:
sort.Slice(data, func(i, j int) bool {
if data[i].number != data[j].number {
return data[i].number < data[j].number
}
return data[i].coordinate < data[j].coordinate
})
推荐阅读
- python-3.x - 是否可以从 BytesIO 对象读取 DICOM 文件?
- android - HTML 代码不包含我想要的字符串
- r - 如何计算 R 中具有不同时间范围和 NA 的时间序列数据的平均值
- vscode-settings - 带有 WSL 的 VS Code 现在打开 browser.sh 文件,而不是启动浏览器
- r - 有条件地将多列中的值替换为一列中的值
- aws-lambda - API 网关代理集成。第二个 lambda 函数的返回响应
- c# - 是否可以在不使用 ArcGIS Pro 的情况下使用 ArcGIS Web 查看 BIM 模型
- html - 兄弟淡入淡出类扩展到容器之外
- java - 在 Spring Boot 中,我们如何通过命令行加载 kafka.bootstrap-servers?
- java - 在 Netty 处理程序中重用 HTTP 响应