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

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

Barbara Streisand
Freigeben: 2024-10-30 14:06:02
Original
868 Leute haben es durchsucht

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

Doppelte Elemente aus einem Slice entfernen

Gegeben ist eine Textdatei, die eine Liste von Peers enthält, die als Objekte mit „Adresse“ und „PeerID“ dargestellt werden. Attribute besteht die Aufgabe darin, alle doppelten Peers basierend auf der Übereinstimmung von „Adresse“ und „PeerID“ aus dem „Bootstrap“-Slice in der Codekonfiguration zu entfernen.

Um dies zu erreichen, iterieren wir durch jedes Peer-Objekt im Slice mehrfach. Während jeder Iteration vergleichen wir seine „PeerID“ und „Adresse“ mit den vom Benutzer bereitgestellten Werten. Wenn eine Übereinstimmung gefunden wird, entfernen wir das spezifische Objekt aus dem Slice. Dieser Prozess stellt sicher, dass alle Instanzen des Peers entfernt werden.

Es gibt jedoch einen Randfall, der berücksichtigt werden muss. Wenn der letzte Peer im „Bootstrap“-Slice ein Duplikat ist, gerät der Code mit der Fehlermeldung „Slice-Grenzen außerhalb des Bereichs“ in Panik. Um dieses Problem zu beheben, können wir eine robustere Lösung implementieren, die nicht übereinstimmende Werte an den Anfang des Slice kopiert und den Überschuss abschneidet, wenn die Iteration abgeschlossen ist.

Hier ist der aktualisierte Code:

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

Dieser Code durchläuft das „Bootstrap“-Slice. Für jedes Peer-Objekt werden dessen „PeerID“ und „Adresse“ mit den vom Benutzer bereitgestellten Werten verglichen. Wenn der Peer kein Duplikat ist, wird er an den Anfang des Slice am Index „i“ kopiert. Der „i“-Index wird dann erhöht, um auf die nächste verfügbare Position zu zeigen.

Sobald die Iteration abgeschlossen ist, wird der „Bootstrap“-Slice gekürzt, um alle überschüssigen Elemente zu entfernen, wodurch effektiv alle doppelten Peers, einschließlich des letzten, entfernt werden .

Das obige ist der detaillierte Inhalt vonWie entferne ich in Go effizient doppelte Peers 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage