Heim >Backend-Entwicklung >Golang >Wie sortiere ich ein Slice von Strukturen mit verschachtelten Slice-Feldern in Go?

Wie sortiere ich ein Slice von Strukturen mit verschachtelten Slice-Feldern in Go?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-27 06:18:29439Durchsuche

How to Sort a Slice of Structs with Nested Slice Fields in Go?

Sortieren nach Slice-Feldern

In Go kann es vorkommen, dass Sie Slices von Strukturen sortieren müssen, die weitere verschachtelte Slice-Felder enthalten. Betrachten Sie das folgende Beispiel:

<code class="go">type Parent struct {
    id       string
    children []Child
}

type Child struct {
    id string
}</code>

Angenommen, Sie haben ein Segment von Parent-Strukturen mit den folgenden Werten:

<code class="go">parents := make([]Parent, 0)

p1 := Parent {
    "3",
    []Child {
        {"2"},
        {"3"},
        {"1"},
    },
}

p2 := Parent {
    "1",
    []Child {
        {"8"},
        {"9"},
        {"7"},
    },
}

p3 := Parent {
    "2",
    []Child {
        {"5"},
        {"6"},
        {"4"},
    },
}             

parents = append(parents, p1, p2, p3)</code>

Das Ziel besteht darin, das Parent-Slice nach zwei Kriterien zu sortieren:

  1. Sortieren Sie zunächst nach Parent.id.
  2. Sortieren Sie innerhalb jedes übergeordneten Elements die untergeordneten Slices nach Child.id.

Lösung:

Um die gewünschte Sortierung zu erreichen, können Sie die Funktion sort.Slice verwenden, um das übergeordnete Slice und die verschachtelten untergeordneten Slices zu sortieren. Hier ist der Code:

<code class="go">// sort each Parent in the parents slice by Id
sort.Slice(parents, func(i, j int) bool {return parents[i].id < parents[j].id})

// for each Parent, sort each Child in the children slice by Id
for _, parent := range parents {
    sort.Slice(parent.children, func(i, j int) bool {return parent.children[i].id < parent.children[j].id})
}</code>

Dieser Code sortiert zuerst den Eltern-Slice und stellt so sicher, dass die Eltern in aufsteigender Reihenfolge basierend auf ihrem ID-Feld angeordnet werden. Anschließend werden für jedes übergeordnete Element die untergeordneten Segmente auf die gleiche Weise sortiert.

Erwartetes Ergebnis:

<code class="go">[{1 [{7} {8} {9}]} {2 [{4} {5} {6}]} {3 [{1} {2} {3}]}]</code>

Das obige ist der detaillierte Inhalt vonWie sortiere ich ein Slice von Strukturen mit verschachtelten Slice-Feldern in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn