Heim > Artikel > Backend-Entwicklung > Wie gruppiert und summiert man ein Stück Strukturen in Go effizient?
Gruppieren und Summieren eines Segments von Strukturen in Go
In diesem Szenario möchten Sie ein Segment von Strukturen basierend auf acht spezifischen Feldern gruppieren und summieren ein zusätzliches Ganzzahlfeld, ähnlich wie bei SQL-Abfragen. Um dies zu erreichen, haben Sie zunächst darüber nachgedacht, eine Equal-Funktion zum Vergleichen von Strukturen zu erstellen und iterativ zu prüfen, ob sich jedes Element in einer Hash-Tabelle befindet, und das Feld entsprechend hinzuzufügen oder zu summieren.
Während Ihr Ansatz gültig ist, gibt es dafür eine alternative Lösung bietet Effizienz und Einfachheit. Refaktorieren Sie Ihre Typen, sodass die Schlüsselfelder (id1-id8) eine separate Struktur, Key, bilden. Dadurch können Sie Key als Kartenschlüssel verwenden, da Strukturen in Go vergleichbar sind.
Hier ist die geänderte Typdefinition:
<code class="go">type Key struct { id1 int id2 int id3 int id4 int id5 int id6 int id7 int id8 int } type Register struct { key Key money int }</code>
Um die Summe zu gruppieren und zu berechnen, verwenden Sie eine Karte[ Schlüssel]int. Verwenden Sie Register.key als Kartenschlüssel, um alle Register mit denselben Schlüsseln (IDs) zu sammeln:
<code class="go">regs := []*Register{ {Key{id1: 345}, 1500}, {Key{id1: 345, id2: 140}, 2700}, {Key{id1: 345, id2: 140}, 1300}, {Key{id1: 345}, 1000}, {Key{id3: 999}, 1000}, {Key{id3: 999}, 2000}, } // calculate sum: m := map[Key]int{} for _, v := range regs { m[v.key] += v.money }</code>
Diese Lösung bietet eine einfache und effiziente Möglichkeit, die bereitgestellten Struktursegmente zu gruppieren und zu summieren. Es sind keine zusätzlichen Bibliotheken oder komplexen Iterationsmechanismen erforderlich.
Das obige ist der detaillierte Inhalt vonWie gruppiert und summiert man ein Stück Strukturen in Go effizient?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!