Maison  >  Article  >  développement back-end  >  Plusieurs méthodes de déduplication de carte dans Golang

Plusieurs méthodes de déduplication de carte dans Golang

PHPz
PHPzoriginal
2023-04-10 14:18:431429parcourir

Le langage Go est un langage statique fortement typé, connu sous le nom de « langage C de l'ère Internet ». Dans la bibliothèque standard du langage Go, map est une structure de données très couramment utilisée, souvent utilisée pour stocker des paires clé-valeur. La carte peut être créée à l'aide de la fonction make et fournit des méthodes de fonctionnement riches. Cependant, à mesure que le nombre d'éléments dans la carte augmente, la mémoire occupée par celle-ci deviendra de plus en plus grande. Si elle n'est pas contrôlée, l'utilisation de la mémoire du programme peut être trop élevée. Cet article présentera plusieurs méthodes pour implémenter la déduplication de carte Golang afin de vous aider à mieux contrôler la mémoire du programme.

Méthode 1 : Parcourir et compter

Pour supprimer les éléments spécifiés dans la carte, vous devez utiliser la fonction de suppression intégrée. Cependant, dans les situations où tous les éléments de la carte doivent être dédupliqués, nous pouvons réaliser une déduplication de carte en parcourant la carte et en comptant le nombre d'éléments.

Le processus spécifique est le suivant :

  1. Définir une carte de type map[string]int;
  2. Parcourir la carte originale et compter le nombre d'occurrences de chaque élément
  3. Construire une nouvelle carte et ajouter des éléments avec le nombre d'occurrences 1 Mettez-le dans la carte ;
  4. Renvoyez la nouvelle carte.

L'exemple de code est le suivant :

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
}

Méthode 2 : Utiliser slice comme stockage auxiliaire

Une autre façon de dédupliquer la carte Golang consiste à utiliser slice comme stockage auxiliaire. Le processus est le suivant :

  1. Définir une carte de type map[string]bool ;
  2. Parcourir la carte d'origine et stocker toutes les paires clé-valeur de la carte dans la carte auxiliaire ;
  3. Construire une nouvelle tranche et stocker ; toutes les paires clé-valeur de la carte auxiliaire La clé est stockée dans la tranche
  4. renvoie la nouvelle tranche.

L'exemple de code est le suivant :

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
}

Méthode 3 : Utiliser struct pour filtrer

L'utilisation de struct pour filtrer est également l'un des moyens de réaliser la déduplication de carte. Les étapes spécifiques sont les suivantes :

  1. Définir une structure, chaque élément contient deux attributs clé et valeur
  2. Définir une carte de type map[string]struct
  3. Parcourir la carte d'origine, utiliser la valeur de l'élément comme clé ; , et construisez une nouvelle map[string]struct;
  4. Renvoyer la nouvelle carte.

L'exemple de code est le suivant :

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
}

Résumé

Les trois méthodes ci-dessus pour implémenter la déduplication de carte Golang, à savoir le parcours et le comptage, l'utilisation de slice comme stockage auxiliaire et l'utilisation de struct pour le filtrage. Lorsque vous utilisez la carte, veillez à contrôler le nombre d'éléments pour éviter une utilisation excessive de la mémoire et affecter les performances du programme. J'espère que cet article vous sera utile.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn