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

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

Linda Hamilton
Linda Hamiltonoriginal
2024-11-05 07:25:02660parcourir

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>

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>

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!

Déclaration:
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