我有一个这样的结构
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
和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
})
关于sorting - 按数字和字母顺序对基于结构的 slice 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61030036/