Maison >développement back-end >Golang >golang supprimer un élément de carte

golang supprimer un élément de carte

WBOY
WBOYoriginal
2023-05-13 09:15:071567parcourir

Avec la large application de Golang dans l'industrie Internet, de plus en plus de développeurs l'utilisent pour créer des applications hautes performances. Parmi eux, map est l’un des types importants de Golang. Il fournit une méthode pour trouver et stocker rapidement des paires clé-valeur. Dans les applications pratiques, nous pouvons souvent avoir besoin de supprimer un élément de la carte. Cet article présentera plusieurs méthodes pour supprimer des éléments de carte dans Golang.

1. Utilisez le mot-clé delete

Golang fournit la fonction intégrée delete pour supprimer des éléments de la carte. La syntaxe est la suivante :

delete(map, key)

Parmi eux, map est l'objet map de l'élément à supprimer, et key est la clé de l'élément à supprimer. Voici un exemple simple qui montre comment utiliser le mot-clé delete pour supprimer des éléments :

package main

import "fmt"

func main() {
    m := map[string]int{
        "a": 1,
        "b": 2,
        "c": 3,
    }
    delete(m, "a")
    fmt.Println(m)
}

Le résultat de sortie est :

map[b:2 c:3]

Comme le montre l'exemple ci-dessus, l'utilisation de delete peut rapidement supprimer des éléments de la carte. Mais il convient de noter que si la clé spécifiée n’existe pas dans la carte, la suppression n’effectuera aucune opération.

2. Utilisez le parcours de plage pour supprimer des éléments

Dans certains cas, nous devrons peut-être parcourir la carte et supprimer des éléments qui remplissent les conditions. Dans ce cas, utiliser delete directement n'est pas réalisable car la modification de la carte lors du parcours de la carte provoquera une erreur. À ce stade, vous pouvez utiliser la plage pour parcourir la carte et marquer les éléments à supprimer, et enfin parcourir à nouveau la carte pour supprimer les éléments marqués. Voici un exemple qui montre comment utiliser le parcours de plage pour supprimer des éléments :

package main

import "fmt"

func main() {
    m := map[string]int{
        "a": 1,
        "b": 2,
        "c": 3,
    }
    deleteKeys := make([]string, 0)
    for k, v := range m {
        if v > 2 {
            deleteKeys = append(deleteKeys, k)
        }
    }
    for _, k := range deleteKeys {
        delete(m, k)
    }
    fmt.Println(m)
}

Le résultat de sortie est :

map[a:1 b:2]

Dans l'exemple ci-dessus, nous utilisons d'abord la plage pour parcourir la carte et enregistrer les clés correspondantes dans une tranche. Utilisez ensuite à nouveau range pour parcourir la tranche et supprimer les éléments qui doivent être supprimés dans l’ordre. Il est à noter qu'une autre tranche est utilisée pour stocker la clé à supprimer, et elle ne peut pas être supprimée directement lors du parcours de la carte, car modifier la carte pendant le parcours provoquera une erreur.

3. Utilisez sync.Map pour supprimer des éléments de manière synchrone

Dans les applications à haute concurrence, nous devrons peut-être utiliser le mappage avec des fonctions de lecture et d'écriture simultanées, et le package de synchronisation de Golang fournit un type de mappage thread-safe sync.Map . La suppression d'éléments à l'aide de sync.Map est relativement simple et il n'y a pas lieu de s'inquiéter des problèmes de concurrence en lecture et en écriture lors d'écritures simultanées. Voici un exemple qui montre comment utiliser sync.Map pour supprimer des éléments :

package main

import (
    "fmt"
    "sync"
)

func main() {
    m := &sync.Map{}
    m.Store("a", 1)
    m.Store("b", 2)
    m.Store("c", 3)
    m.Range(func(k, v interface{}) bool {
        if k == "b" {
            m.Delete(k)
        }
        return true
    })
    m.Range(func(k, v interface{}) bool {
        fmt.Printf("%s:%v
", k, v)
        return true
    })
}

Le résultat est :

a:1
c:3

Dans l'exemple ci-dessus, nous avons d'abord créé un objet sync.Map et y avons ajouté plusieurs paires clé-valeur. Utilisez ensuite la méthode Range pour parcourir la carte et supprimer les éléments qui remplissent les conditions. Il convient de noter que lors de la suppression d'éléments, vous devez utiliser la méthode Delete au lieu du mot-clé delete.

4. Utiliser une nouvelle affectation de carte

En plus des méthodes ci-dessus, une autre façon courante de supprimer des éléments de carte consiste à utiliser une nouvelle affectation de carte. L'idée de cette méthode est de créer un nouvel objet cartographique et d'attribuer les éléments qui doivent être conservés au nouvel objet cartographique. Voici un exemple qui montre comment supprimer des éléments en utilisant la nouvelle affectation de map :

package main

import "fmt"

func main() {
    m := map[string]int{
        "a": 1,
        "b": 2,
        "c": 3,
    }
    newM := make(map[string]int)
    for k, v := range m {
        if k != "a" {
            newM[k] = v
        }
    }
    fmt.Println(newM)
}

Le résultat de sortie est :

map[b:2 c:3]

Dans l'exemple ci-dessus, nous créons d'abord un nouvel objet de carte vide newM, puis parcourons la carte d'origine. objet m, les éléments qui n'ont pas besoin d'être supprimés sont attribués à newM. Il convient de noter que cette méthode est plus efficace lorsqu’il y a moins d’éléments dans la carte, mais elle entraînera une dégradation des performances lorsque le nombre d’éléments dans la carte est important. Par conséquent, il est recommandé d’utiliser la méthode delete ou Range lors de la suppression d’éléments de la carte pour obtenir de meilleures performances.

Conclusion

Dans Golang, il existe de nombreuses façons de supprimer des éléments de carte, parmi lesquelles delete est la méthode la plus simple et la plus couramment utilisée ; la méthode Range convient aux scénarios dans lesquels les éléments qualifiés doivent être supprimés ; Map convient aux applications à haute concurrence ; l'utilisation de nouvelles affectations de map peut supprimer des éléments de la map, mais il y aura une certaine surcharge en termes de performances. En fonction du scénario spécifique, nous pouvons choisir la méthode qui nous convient le mieux pour améliorer les performances et la lisibilité de l'application.

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