Maison > Article > développement back-end > Comment regrouper et additionner efficacement une tranche de structures dans 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!