„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 Peers aus einem Slice?

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

Veröffentlicht am 17.11.2024
Durchsuche:649

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

Entfernen doppelter Elemente aus einem Slice

Gegeben sei 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 ist jedoch ein Randfall zu berücksichtigen. 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]

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 inkrementiert, um auf die nächste verfügbare Position zu zeigen.

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

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