ホームページ  >  記事  >  バックエンド開発  >  golang でマップの重複を排除するためのいくつかの方法

golang でマップの重複を排除するためのいくつかの方法

PHPz
PHPzオリジナル
2023-04-10 14:18:431479ブラウズ

Go 言語は、「インターネット時代の C 言語」として知られる、強く型付けされた静的言語です。 Go 言語の標準ライブラリでは、マップは非常に一般的に使用されるデータ構造であり、キーと値のペアを格納するためによく使用されます。 make関数を使用してマップを作成でき、豊富な操作方法を提供します。ただし、マップの要素数が増えると、マップが占有するメモリがますます大きくなり、制御しないとプログラムのメモリ使用量が過剰になる可能性があります。この記事では、プログラム メモリをより適切に制御できるように、golang マップの重複排除を実装するいくつかの方法を紹介します。

方法 1: トラバースとカウント

マップ内の指定した要素を削除するには、組み込みの削除関数を使用する必要があります。ただし、マップ内のすべての要素を重複排除する必要がある場合は、マップを走査して要素の数をカウントすることでマップの重複排除を実現できます。

具体的なプロセスは次のとおりです:

  1. タイプ map[string]int; のマップを定義します;
  2. 元のマップを走査し、次の出現回数を数えます。各要素;
  3. 新しいマップを構築し、出現数が 1 の要素をマップに配置します;
  4. 新しいマップを返します。

サンプル コードは次のとおりです。

func removeDuplicate(m map[string]string) map[string]string {
    counts := make(map[string]int)
    for _, v := range m {
        counts[v] += 1
    }
    res := make(map[string]string)
    for k, v := range m {
        if counts[v] == 1 {
            res[k] = v
        }
    }
    return res
}

方法 2: スライスを補助ストレージとして使用する

Golang マップ重複排除のもう 1 つの方法は、スライスを補助ストレージとして使用することです。 。プロセスは次のとおりです:

  1. タイプ map[string]bool のマップを定義します;
  2. 元のマップを走査し、マップ内のすべてのキーと値のペアを補助マップに保存します;
  3. 新しいスライスを構築し、補助マップ内のすべてのキーをスライスに保存します;
  4. 新しいスライスを返します。

サンプル コードは次のとおりです。

func removeDuplicate(m map[string]string) []string {
    res := make([]string, 0, len(m))
    temp := make(map[string]bool)
    for _, v := range m {
        if _, ok := temp[v]; !ok {
            temp[v] = true
            res = append(res, v)
        }
    }
    return res
}

方法 3: フィルタリングに構造体を使用する

フィルタリングに構造体を使用することも、マップの重複排除を実現する方法の 1 つです。 。

  1. 構造体を定義し、各要素には 2 つの属性キーと値が含まれます;
  2. 型マップ [string]struct を定義します;
  3. 元のマップを走査し、要素値をキーとして使用し、新しいマップ[文字列]構造体を構築します;
  4. 新しいマップを返します。

サンプル コードは次のとおりです。

func removeDuplicate(m map[string]string) map[string]struct{} {
    res := make(map[string]struct{}, len(m))
    for _, v := range m {
        res[v] = struct{}{}
    }
    return res
}

概要

上記は、Golang マップの重複排除を実装する 3 つの方法、つまりトラバースとカウント、およびスライスの使用です。補助ストレージを使用し、フィルタリングに構造体を使用します。マップを使用する場合は、過剰なメモリ使用量やプログラムのパフォーマンスへの影響を避けるために要素数の制御に注意してください。この記事がお役に立てば幸いです。

以上がgolang でマップの重複を排除するためのいくつかの方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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