„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie entferne ich in Go effizient doppelte Elemente aus einem Slice?

Wie entferne ich in Go effizient doppelte Elemente aus einem Slice?

Veröffentlicht am 22.12.2024
Durchsuche:526

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

Doppelte Elemente aus einem Slice löschen

In Ihrer Situation tritt beim Löschen doppelter Elemente aus einem Slice ein Problem auf, weil Sie Wiederholen Sie die Iteration durch das Slice und entfernen Sie Elemente während der Iteration. Dies kann zu Indexfehlern und Panik führen, wenn sich am Ende des Slice ein doppeltes Element befindet.

Um dieses Problem zu beheben, besteht ein effizienterer Ansatz darin, eindeutige Elemente an den Anfang des Slice zu kopieren und dann zu trimmen alle überschüssigen Elemente danach. So können Sie es machen:

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]

In diesem Code:

  • Wir initialisieren eine Variable i auf 0, die die Indexposition im neuen, beschnittenen Slice darstellt.
  • Wir iterieren über jedes Element von cfg.Bootstrap.
  • Wenn ein Element mit beiden übereinstimmt Vom Benutzer bereitgestellte PeerID und Adresse, wir überspringen es.
  • Andernfalls kopieren wir das Element an die i-te Position im neuen Slice.
  • Wir erhöhen i zur nächsten Position.
  • Nach der Schleife weisen wir das neue Slice cfg.Bootstrap zu und kürzen es auf die richtige Länge.

Dieser Ansatz stellt sicher dass alle doppelten Elemente entfernt werden und das Slice während des gesamten Prozesses konsistent bleibt. Es vermeidet Indexfehler und Panik, die beim Entfernen von Elementen während der Iteration auftreten können.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3