Question

Le titre le dit surtout. Je souhaite ajouter une méthode d'extension simple à la classe Dictionary de base en C #. Au début, j'allais le nommer Pop (clé TKey), un peu comme la méthode Stack, mais elle accepte une clé à utiliser pour la recherche.

Ensuite, j'allais faire Take (touche TKey), mais cela coïncide avec la méthode LINQ du même nom ... et bien que C # 3.0 vous permette de le faire, je ne l’aime pas.

Alors, qu'en pensez-vous, restez-vous avec Pop ou existe-t-il un meilleur terme pour "rechercher et supprimer un élément"?

(Je me sens un peu gêné de poser cette question, cela me semble une question aussi triviale ... mais j'aime utiliser des normes et je n'ai pas une vaste expérience de nombreux langages / environnements.)

EDIT: Désolé, j'aurais dû expliquer plus de choses .... Dans ce cas, je ne peux pas utiliser le terme Remove car il est déjà défini par la classe que j'étends avec une nouvelle méthode.

EDIT 2: Ok, voici ce que j’ai eu jusqu’à présent, inspiré par la sagesse de la foule:

public static TValue Extract<TKey, TValue>
(
    this Dictionary<TKey, TValue> dict,
    TKey key
)
{
    TValue value = dict[key];
    dict.Remove(key);
    return value;
}

public static bool TryExtract<TKey, TValue>
(
    this Dictionary<TKey, TValue> dict,
    TKey key,
    out TValue value
)
{
    if( !dict.TryGetValue(key, out value) )
    {
        return false;
    }
    dict.Remove(key);
    return true;
}
Était-ce utile?

La solution

Je pense que Extrait , comme lorsque les archéologues Trouvez une momie dans le sol, Supprimez-le puis Retour à un musée:)

Autres conseils

quelque chose qui cloche en particulier avec la Supprimer (clé ) méthode déjà fournie?

oh, attendez, vous voulez aussi retourner l'élément supprimé? que diriez-vous

object valueRemoved = someDictionary.RemoveElement(key)

facilement implémenté comme

if (!dict.ContainsKey(key))
{
    return null;
}
object val = dict[key];
dict.Remove(key);
return val;

Ma première hypothèse aurait été "Prendre", mais comme vous l'avez indiqué, c'est déjà pris. Mes prochaines suggestions seraient " Extraire " ou "Détacher", mais ils peuvent être ambigus.

Que diriez-vous de "Retrait"? ou "PullOut"?

Cette action rappelle légèrement une ancienne plate-forme de collaboration (principalement académique) appelée Linda . Dans cet environnement, ce que vous parlez serait appelé "dans". Mais c’est un nom épouvantable pour cela - ils avaient essentiellement les noms à l’arrière parce qu’ils les nommaient du point de vue de l’espace de tuple partagé. Alors, tant pis.

L’extrait est bon et "Pop". est également assez évident (à peu près tout le monde saurait ce que vous faisiez, même s’il ne s’agit pas d’une pile).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top