Go スライスまたは配列内の固有の項目の検索
Go でデータを扱う場合、固有の要素のみを抽出する必要がある場合があります。スライスまたは配列から。 Python はこの目的のためにセットのような便利な構造を提供しますが、Go は同様の組み込み機能をネイティブに提供しません。
質問で提供されているサンプル コードを考えてみましょう。ここでの目的は、リストから一意の座標を見つけることです。重複が含まれています。このコードは、元のリスト (訪問済み) と最初は空の一意のリストの両方を反復処理し、リフレクションを使用して訪問済みの各要素と一意のすべての要素を比較することでこれを達成しようとします。
コード分析とエラー
ただし、このコードにはいくつかの問題があります。
改善された解決策
目的のロジックに従う、簡略化されたより効率的なソリューションを以下に示します。
<code class="go">visited := []visit{ visit{1, 100}, visit{2, 2}, visit{1, 100}, visit{1, 1}, } var unique []visit for _, v := range visited { skip := false for _, u := range unique { if v == u { skip = true break } } if !skip { unique = append(unique, v) } } fmt.Println(unique)</code>
Map を使用した代替ソリューション
代わりに、Go のマップを活用することもできます[訪問] bool を使用してセットのような構造を作成し、次のように一意の要素を抽出します。
<code class="go">visited := []visit{ visit{1, 100}, visit{2, 2}, visit{1, 100}, visit{1, 1}, } unique := map[visit]bool{} for _, v := range visited { unique[v] = true } fmt.Println(unique)</code>
マップ キーは一意の要素を表します。一意の訪問値のスライスを取得するには、追加の手順が必要です。
<code class="go">visited := []visit{ visit{1, 100}, visit{2, 2}, visit{1, 100}, visit{1, 1}, } var unique []visit m := map[visit]bool{} for _, v := range visited { if !m[v] { m[v] = true unique = append(unique, v) } } fmt.Println(unique)</code>
これらのソリューションは、Go スライスまたは配列内の一意の要素を効果的に見つけ、問題のステートメントに準拠し、構築時に効率的な代替手段を提供します。セットの機能が不足しています。
以上がGo スライスまたは配列内で固有の要素を見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。