Maison > développement back-end > Golang > Comment supprimer efficacement des éléments des tableaux Struct dans Go ?

Comment supprimer efficacement des éléments des tableaux Struct dans Go ?

Linda Hamilton
Libérer: 2024-12-07 21:12:13
original
496 Les gens l'ont consulté

How to Efficiently Delete Elements from Struct Arrays in Go?

Suppression efficace d'éléments des tableaux de structures dans Golang

Lorsque vous travaillez avec des tableaux de structures, il est souvent nécessaire de supprimer des éléments spécifiques en fonction des conditions . Le code suivant illustre un problème rencontré lors de la tentative de suppression d'un élément à l'index « i » d'un tableau appelé « config.Applications » :

type Config struct {
  Applications []Application
}

config = new(Config)
_ = decoder.Decode(&config)

for i, application := range config.Applications {
  if i == 1 {
    config.Applications = _removeApplication(i, config.Applications)
  }
}

func _removeApplication(i int, list []Application) []Application {
  if i < len(list)-1 {
    list = append(list[:i], list[i+1:]...)
  } else {
    log.Print(list[i].Name)
    list = list[:i]
  }
  return list
}
Copier après la connexion

Ce code entraîne une erreur « hors plage » car le La boucle for essaie toujours d'accéder à l'élément supprimé à l'index 'i'. Pour résoudre ce problème, il est recommandé d'utiliser l'une des techniques de suppression efficaces suivantes :

  1. Supprimer un élément du milieu :
list = append(list[:i], list[i+1:]...)
Copier après la connexion
  1. Supprimer le dernier element :
list = list[:i]
Copier après la connexion
  1. Supprimer un élément à l'aide d'une astuce slice :
list = list[:i+copy(list[i:], list[i+1:])]
Copier après la connexion

Notez que lors de la suppression éléments d'un tableau sur lequel vous effectuez actuellement une boucle, il est préférable d'utiliser une boucle descendante pour éviter d'éventuels problèmes d'index :

for i := len(config.Applications) - 1; i >= 0; i-- {
  application := config.Applications[i]
  // Condition to decide if current element has to be deleted:
  if haveToDelete {
    config.Applications = append(config.Applications[:i], config.Applications[i+1:]...)
  }
}
Copier après la connexion

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 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