Maison >développement back-end >Golang >Comment supprimer efficacement les éléments en double d'une tranche en Go ?

Comment supprimer efficacement les éléments en double d'une tranche en Go ?

DDD
DDDoriginal
2024-10-29 08:29:02816parcourir

How to Efficiently Remove Duplicate Items from a Slice in Go?

Suppression d'éléments en double d'une tranche

Dans votre situation, vous rencontrez un problème lors de la suppression d'éléments en double d'une tranche, car vous réitérer la tranche et supprimer des éléments pendant que vous itérez. Cela peut entraîner des erreurs d'indexation et des paniques si un élément en double se trouve à la fin de la tranche.

Pour résoudre ce problème, une approche plus efficace consiste à copier des éléments uniques au début de la tranche, puis à les découper. tout élément excédentaire par la suite. Voici comment procéder :

<code class="go">i := 0
for _, v := range cfg.Bootstrap {
    if v.PeerID == peer.PeerID && v.Address == peer.Address {
        continue
    }
    cfg.Bootstrap[i] = v
    i++
}
cfg.Bootstrap = cfg.Bootstrap[:i]</code>

Dans ce code :

  • Nous initialisons une variable i à 0, qui représente la position de l'index dans la nouvelle tranche découpée.
  • Nous parcourons chaque élément de cfg.Bootstrap.
  • Si un élément correspond à la fois au PeerID et à l'adresse fournis par l'utilisateur, nous l'ignorons.
  • Sinon, nous copions l'élément à la ième position dans la nouvelle tranche.
  • Nous incrémentons i à la position suivante.
  • Après la boucle, nous attribuons la nouvelle tranche à cfg.Bootstrap et la tronçons à la bonne longueur.

Cette approche garantit que tous les éléments en double sont supprimés et que la tranche reste cohérente tout au long du processus. Cela évite les erreurs d'indexation et les paniques qui peuvent survenir lors de la suppression d'éléments lors d'une itération.

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