Sorting 按数字和字母顺序对基于结构的切片排序
我有一个像这样的结构片Sorting 按数字和字母顺序对基于结构的切片排序,sorting,go,Sorting,Go,我有一个像这样的结构片 type Interval struct{ number float64 coordinate string } var data []Interval 假设数据如下所示 []Interval{ Interval{ number: 1, coordinate: "x", }, Interval{ number: 8, coordinate: "y",
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",
},
}
我的问题是如何按编号
和坐标
排序
我尝试过下面的排序方法,但并不像我期望的那样
// 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 x} {5 y} {6 y} {7 y} {8 y}]
差异:
{5y}{5x}
应该是{5x}{5y}
提示:我的预期结果与python在函数sort
非常感谢您提供的任何帮助在属性<代码>编号相等的情况下,您的comparator函数不会比较属性<代码>坐标。因此,如果排序算法不稳定,{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
})
sort.Slice(数据,func(i,j int)bool{
如果数据[i].number!=数据[j].number{
返回数据[i]。编号<数据[j]。编号
}
返回数据[i]。坐标<数据[j]。坐标
})
谢谢,这是一种魅力。我错过了检查号码的条件。谢谢你的帮助
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
})