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

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

DDD
リリース: 2024-10-29 08:29:02
オリジナル
870 人が閲覧しました

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

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

あなたの状況では、スライスから重複アイテムを削除するときに問題が発生します。スライスを繰り返し処理し、繰り返し中に要素を削除します。これにより、重複する項目がスライスの最後にある場合、インデックス エラーやパニックが発生する可能性があります。

この問題に対処するには、より効率的な方法は、一意の要素をスライスの先頭にコピーしてからトリミングすることです。後は余分な要素。その方法は次のとおりです:

<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>
ログイン後にコピー

このコードでは:

  • 変数 i を 0 に初期化します。これは、新しいトリミングされたスライスのインデックス位置を表します。
  • cfg.Bootstrap の各要素を繰り返し処理します。
  • 要素がユーザー指定の PeerID と Address の両方に一致する場合は、その要素をスキップします。
  • それ以外の場合は、要素をコピーします
  • i を次の位置にインクリメントします。
  • ループの後、新しいスライスを cfg.Bootstrap に割り当て、正しい長さに切り詰めます。

このアプローチにより、すべての重複要素が削除され、プロセス全体でスライスの一貫性が維持されます。これにより、反復中に要素を削除するときに発生する可能性のあるインデックス エラーやパニックが回避されます。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート