Duplikate aus einem Slice löschen
Ihr Ziel ist es, doppelte Peers aus einer Textdatei zu entfernen, in der jeder Peer durch eine Adresse und PeerID gekennzeichnet ist. Der bereitgestellte Code bewältigt diese Aufgabe effektiv, beim Löschen des letzten Duplikats tritt jedoch ein Fehler auf. Um dieses Problem zu lösen, wird ein überarbeiteter Ansatz vorgestellt.
Deklarieren Sie zunächst eine Variable i und initialisieren Sie sie auf 0. Diese Variable verfolgt den Index des letzten nicht duplizierten Peers im cfg.Bootstrap-Slice. Anschließend durchlaufen Sie den Slice mit einer bereichsbasierten for-Schleife.
Überprüfen Sie innerhalb der Schleife, ob die Adresse und PeerID des aktuellen Peers mit denen des zu entfernenden Peers übereinstimmen. Wenn dies der Fall ist, überspringen Sie den aktuellen Peer. Andernfalls weisen Sie den aktuellen Peer cfg.Bootstrap[i] zu und erhöhen i.
Nach Abschluss der Schleife enthält cfg.Bootstrap[i:] nur die doppelten Peers, die entfernt werden müssen. Um diese überschüssigen Werte zu reduzieren, weisen Sie cfg.Bootstrap[:i] wieder cfg.Bootstrap zu.
Hier ist der überarbeitete Codeausschnitt:
<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>
Dieser überarbeitete Ansatz löscht effizient alle doppelten Peers. einschließlich derjenigen an letzter Stelle.
Das obige ist der detaillierte Inhalt vonWie entferne ich effizient doppelte Einträge aus einem Slice in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!