„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie sortiere ich ein Segment von Strukturen nach mehreren Feldern in Go?

Wie sortiere ich ein Segment von Strukturen nach mehreren Feldern in Go?

Veröffentlicht am 15.11.2024
Durchsuche:712

How to Sort a Slice of Structs by Multiple Fields in Go?

Slice-Objekte nach mehreren Feldern sortieren

Sortierung nach mehreren Kriterien

Berücksichtigen Sie die folgenden übergeordneten und untergeordneten Strukturen:

type Parent struct {
    id       string
    children []Child
}

type Child struct {
    id string
}

Angenommen, wir haben ein Segment von Parent-Strukturen mit vordefinierten Werten:

parents := []Parent{
    {
        "3",
        []Child{
            {"2"},
            {"3"},
            {"1"},
        },
    },
    {
        "1",
        []Child{
            {"8"},
            {"9"},
            {"7"},
        },
    },
    {
        "2",
        []Child{
            {"5"},
            {"6"},
            {"4"},
        },
    },
}

Sortieranforderungen:

Unser Ziel ist es, den übergeordneten Slice nach zwei Kriterien zu sortieren:

  1. Sortieren Sie übergeordnete Strukturen in aufsteigender Reihenfolge ihres ID-Feldes.
  2. Sortieren Sie innerhalb jeder übergeordneten Struktur die untergeordneten Slices in aufsteigender Reihenfolge des ID-Feldes.

Lösung:

Um diese Sortierung zu erreichen, verwenden wir die Funktion sort.Slice, die eine flexible Möglichkeit bietet, Slices basierend auf benutzerdefinierten Vergleichsfunktionen zu sortieren. Hier ist der Code:

// Sort parents by their ID
sort.Slice(parents, func(i, j int) bool { return parents[i].id 

Dieser Sortieralgorithmus verarbeitet beide Kriterien effizient und stellt sicher, dass das übergeordnete Slice wie gewünscht geordnet ist.

Erwartetes Ergebnis:

Das sortierte Slice sollte ähneln der folgenden Struktur:

[{1 [{7} {8} {9}]} {2 [{4} {5} {6}]} {3 [{1} {2} {3}]}]
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3