331 votes

Supprimer la clé dans la carte

J'ai une carte :

var sessions =  map[string] chan int{}

Comment puis-je supprimer sessions[key] ? J'ai essayé :

sessions[key] = nil,false;

Ça n'a pas marché.

Mise à jour (novembre 2011) :

La syntaxe spéciale pour la suppression des entrées de la carte est supprimée dans le fichier Go version 1 :

Go 1 supprimera l'affectation spéciale de la carte et introduira une nouvelle fonction intégrée, delete : delete(m, x) supprimera l'entrée de la carte récupérée par l'expression m[x] . ...

345voto

C'est étrange,

package main

func main () {
    var sessions = map[string] chan int{};
    delete(sessions, "moo");
}

semble fonctionner. Mais cela semble être une mauvaise utilisation des ressources !

Une autre méthode consiste à vérifier l'existence et à utiliser la valeur elle-même :

package main

func main () {
    var sessions = map[string] chan int{};
    sessions["moo"] = make (chan int);
    _, ok := sessions["moo"];
    if ok {
        delete(sessions, "moo");
    }
}

119voto

Hannson Points 2165

Copié de Go 1 notes de mise à jour

Dans l'ancienne langue, pour supprimer l'entrée avec la touche k de la carte représentée par m L'un d'entre eux a écrit la déclaration,

m[k] = value, false

Cette syntaxe était un cas particulier, la seule affectation de deux à un. Elle nécessitait de passer une valeur (généralement ignorée) qui était évaluée mais rejetée, ainsi qu'un booléen qui était presque toujours la constante false. Cette syntaxe faisait l'affaire, mais elle était étrange et suscitait la controverse.

Dans Go 1, cette syntaxe a disparu ; à la place, il y a une nouvelle fonction intégrée, delete . L'appel

delete(m, k)

supprimera l'entrée de la carte récupérée par l'expression m[k] . Il n'y a pas de valeur de retour. La suppression d'une entrée inexistante est un no-op.

Mise à jour : Running go fix convertira les expressions de la forme m[k] = value, false en delete(m, k) lorsqu'il est clair que la valeur ignorée peut être éliminée du programme en toute sécurité, et false fait référence à la constante booléenne prédéfinie. L'outil de correction signalera d'autres utilisations de la syntaxe pour que le programmeur les examine.

103voto

György Andrasek Points 4332

Desde Go efficace :

Pour supprimer une entrée de carte, utilisez la fonction intégrée delete, dont les arguments sont la carte et la clé à supprimer. Vous pouvez le faire en toute sécurité même si la clé est déjà absente de la carte.

delete(timeZone, "PDT")  // Now on Standard Time

46voto

Zippoxer Points 2271
delete(sessions, "anykey")

De nos jours, rien ne s'écrase.

1voto

Alvin Row Points 2931

Utilisez make (chan int) au lieu de nil . La première valeur doit être du même type que celui de votre carte.

package main

import "fmt"

func main() {

    var sessions = map[string] chan int{}
    sessions["somekey"] = make(chan int)

    fmt.Printf ("%d\n", len(sessions)) // 1

    // Remove somekey's value from sessions
    delete(sessions, "somekey")

    fmt.Printf ("%d\n", len(sessions)) // 0
}

UPDATE : J'ai corrigé ma réponse.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X