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
Linda Hamiltonoriginal
2024-12-07 21:12:13455parcourir

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
}

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:]...)
  1. Supprimer le dernier element :
list = list[:i]
  1. Supprimer un élément à l'aide d'une astuce slice :
list = list[:i+copy(list[i:], list[i+1:])]

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:]...)
  }
}

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