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
})