Heim > Backend-Entwicklung > Golang > Wie entferne ich in Go effizient doppelte Elemente aus einem Slice?

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

DDD
Freigeben: 2024-10-29 08:29:02
Original
814 Leute haben es durchsucht

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

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

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

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 sowohl mit der vom Benutzer angegebenen PeerID als auch mit der Adresse übereinstimmt, überspringen wir es.
  • Andernfalls kopieren wir das Element zur i-ten Position im neuen Slice.
  • Wir erhöhen i auf die nächste 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 der 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.

Das obige ist der detaillierte Inhalt vonWie entferne ich in Go effizient doppelte Elemente aus einem Slice?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage