ホームページ >バックエンド開発 >Golang >Go のスライスから重複ピアを効率的に削除するにはどうすればよいですか?

Go のスライスから重複ピアを効率的に削除するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-30 14:06:02869ブラウズ

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

スライスから重複アイテムを削除

「アドレス」と「ピアID」を持つオブジェクトとして表されるピアのリストを含むテキスト ファイルがあるとします。属性を定義するには、コードの構成内の「ブートストラップ」スライスから一致する「アドレス」と「ピアID」に基づいて重複するピアをすべて削除することがタスクです。

これを達成するには、スライス内の各ピア オブジェクトを反復処理します。複数回。各反復中に、その「PeerID」および「Address」をユーザーが指定した値と比較します。一致するものが見つかった場合は、その特定のオブジェクトをスライスから削除します。このプロセスにより、ピアのすべてのインスタンスが確実に削除されます。

ただし、考慮すべきエッジケースがあります。 「ブートストラップ」スライス内の最後のピアが重複している場合、コードは「スライスの境界が範囲外です」エラーでパニックになります。この問題に対処するには、一致しない値をスライスの先頭にコピーし、反復の完了時に余分な値をトリミングする、より堅牢なソリューションを実装できます。

更新されたコードは次のとおりです:

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]

このコードは、「ブートストラップ」スライスを反復処理します。各ピア オブジェクトについて、その「PeerID」および「アドレス」をユーザーが指定した値と比較します。ピアが重複していない場合は、インデックス「i」のスライスの先頭にコピーされます。次に、「i」インデックスが増分されて、次に使用可能な位置を指します。

反復が完了すると、「ブートストラップ」スライスがトリミングされて余分な要素が削除され、最後のピアを含むすべての重複ピアが効果的に削除されます。 .

以上がGo のスライスから重複ピアを効率的に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。