Maison > développement back-end > Golang > Comment regrouper et additionner efficacement une tranche de structures dans Go ?

Comment regrouper et additionner efficacement une tranche de structures dans Go ?

Linda Hamilton
Libérer: 2024-11-05 07:25:02
original
728 Les gens l'ont consulté

How to Efficiently Group and Sum a Slice of Structs in Go?

Regrouper et additionner une tranche de structures dans Go

Dans ce scénario, vous souhaitez regrouper une tranche de structures en fonction de huit champs spécifiques et additionnez un champ entier supplémentaire, similaire aux requêtes SQL. Pour y parvenir, vous avez initialement envisagé de créer une fonction Equal pour comparer les structures et vérifier de manière itérative si chaque élément se trouve dans une table de hachage, en ajoutant ou en additionnant le champ en conséquence.

Bien que votre approche soit valide, il existe une solution alternative qui offre efficacité et simplicité. Refactorisez vos types afin que les champs clés (id1-id8) forment une structure distincte, Key. Cela vous permet d'utiliser Key comme clé de carte, puisque les structures sont comparables dans Go.

Voici la définition de type modifiée :

<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>
Copier après la connexion

Pour regrouper et calculer la somme, utilisez une carte[ Clé]int. Utilisez Register.key comme clé de carte pour collecter tous les registres avec les mêmes clés (identifiants) :

<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>
Copier après la connexion

Cette solution fournit un moyen simple et efficace de regrouper et d'additionner la tranche de structures fournie. Aucune bibliothèque supplémentaire ni mécanisme d'itération complexe n'est nécessaire.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal