Heim > Backend-Entwicklung > Golang > Wie lösche ich Elemente effizient aus Struct-Arrays in Go?

Wie lösche ich Elemente effizient aus Struct-Arrays in Go?

Linda Hamilton
Freigeben: 2024-12-07 21:12:13
Original
467 Leute haben es durchsucht

How to Efficiently Delete Elements from Struct Arrays in Go?

Effizientes Löschen von Elementen aus Struct-Arrays in Golang

Beim Arbeiten mit Arrays von Strukturen ist es oft notwendig, bestimmte Elemente basierend auf Bedingungen zu entfernen . Der folgende Code zeigt ein Problem, das beim Versuch auftritt, ein Element am Index „i“ aus einem Array namens „config.Applications“ zu löschen:

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
}
Nach dem Login kopieren

Dieser Code führt zu einem „Außerhalb des Bereichs“-Fehlers, weil der Die for-Schleife versucht weiterhin, auf das gelöschte Element am Index „i“ zuzugreifen. Um dieses Problem zu beheben, wird empfohlen, eine der folgenden effizienten Löschtechniken zu verwenden:

  1. Ein Element aus der Mitte entfernen:
list = append(list[:i], list[i+1:]...)
Nach dem Login kopieren
  1. Letzten entfernen Element:
list = list[:i]
Nach dem Login kopieren
  1. Entfernen eines Elements mit einem Slice-Trick:
list = list[:i+copy(list[i:], list[i+1:])]
Nach dem Login kopieren

Beachten Sie dies beim Löschen Elemente aus einem Array, das Sie gerade durchlaufen, verwenden Sie am besten eine Abwärtsschleife, um potenzielle Indexprobleme zu vermeiden:

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:]...)
  }
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie lösche ich Elemente effizient aus Struct-Arrays in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage