Heim  >  Artikel  >  Backend-Entwicklung  >  Wie gruppiert und summiert man Struktursegmente in Go?

Wie gruppiert und summiert man Struktursegmente in Go?

Susan Sarandon
Susan SarandonOriginal
2024-11-02 04:40:02696Durchsuche

How to Group and Sum Slices of Structs in Go?

Gruppieren und Summieren von Strukturabschnitten in Go

Das Problem

Bei der Programmierung ist es oft notwendig, Datenmanipulationsaufgaben im Speicher durchzuführen Sammlungen. Eine häufige Operation besteht darin, Daten in Kategorien zu gruppieren und Werte innerhalb jeder Kategorie zu summieren. Dieses Problem tritt häufig auf, wenn mit Struktursegmenten gearbeitet wird.

Die Herausforderung

Betrachten Sie das folgende Struktursegment:

<code class="go">type Register struct {
    id1 int
    id2 int
    id3 int
    id4 int
    id5 int
    id6 int
    id7 int
    id8 int
    money int
}</code>

Die Aufgabe besteht darin, die Elemente zu gruppieren den Slice durch die ersten acht Felder (die ID-Felder) und summiere die Geldfelder für jede Gruppe. Dieser Vorgang ist analog zur SQL-Abfrage:

<code class="sql">SELECT SUM(money) FROM Registers GROUP BY id1, id2, id3, id4, id5, id6, id7, id8;</code>

Die Lösung

Es gibt mehrere Möglichkeiten, dieses Problem in Go anzugehen. Eine Möglichkeit besteht darin, eine Hash-Tabelle zu verwenden, um die Summen für jede eindeutige Kombination von ID-Feldern zu verfolgen.

  1. Erstellen Sie einen Schlüsseltyp: Definieren Sie eine neue Struktur namens „Key“, die nur die enthält ID-Felder. Diese Struktur dient als eindeutige Kennung für jede Gruppe.
  2. Transformieren Sie die Register: Erstellen Sie ein neues Segment, in dem jedes Element eine Struktur mit einem Schlüsselfeld und einem Geldfeld ist. Das Schlüsselfeld wird auf den entsprechenden Schlüssel für das Element gesetzt und das Geldfeld bleibt unverändert.
  3. Eine Karte initialisieren: Erstellen Sie eine Karte, die Schlüsselwerte ganzzahligen Summen zuordnet.
  4. Iterieren und akkumulieren: Iterieren Sie über das transformierte Segment. Rufen Sie für jedes Element die Summe aus der Karte mit dem Schlüssel des Elements ab, fügen Sie das Geldfeld des Elements hinzu und speichern Sie die aktualisierte Summe wieder in der Karte.

Der folgende Code veranschaulicht diesen Ansatz:

<code class="go">type Key struct {
    id1 int
    id2 int
    id3 int
    id4 int
    id5 int
    id6 int
    id7 int
    id8 int
}

func groupAndSum(registers []*Register) map[Key]int {
    m := map[Key]int{}
    for _, r := range registers {
        key := Key{
            id1: r.id1,
            id2: r.id2,
            id3: r.id3,
            id4: r.id4,
            id5: r.id5,
            id6: r.id6,
            id7: r.id7,
            id8: r.id8,
        }
        m[key] += r.money
    }
    return m
}</code>

Diese Lösung bietet eine effiziente Möglichkeit, Strukturen basierend auf ihren Schlüsseln zu gruppieren und zu summieren.

Das obige ist der detaillierte Inhalt vonWie gruppiert und summiert man Struktursegmente 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