Ordenar rebanada de orden basado struct por número y por orden alfabético

fzlrhmn:

Tengo una rebanada de estructura como esta

type Interval struct{
    number     float64
    coordinate string
}

var data []Interval

asume que los datos son como a continuación

[]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",
    },
}

Mi pregunta es ¿cómo puedo solucionar esto por numbere coordinate?

He tratado con un método para ordenar a continuación, pero no es como mi expectativa

// sort method that I use
sort.Slice(data, func(i, j int) bool {
    return data[i].number < data[j].number
})

resultado:

[{1 x} {2 x} {3 x} {5 y} {5 x} {6 y} {7 y} {8 y}]

expectativa:

[{1 x} {2 x} {3 x} {5 x} {5 y} {6 y} {7 y} {8 y}]

diff: {5 y} {5 x}debe ser{5 x} {5 y}

consejos: Mi expectativa es resultado similar con lo que Python con la función sort

apreciar realmente con cualquier ayuda

de HQT:

Su función de comparación no se puede comparar la propiedad coordinateen la propiedad situación numberes igual. Por lo tanto la posición de {5, x} y {5, y} podría ser no determinista si el algoritmo de clasificación no es estable.

Esta es la versión actualizada de la función de comparación:

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

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=406358&siteId=1
Recomendado
Clasificación