8
votes

Création automatique d'une collection dans le dictionnaire >

Beaucoup de fois que je dois créer un dictionnaire > code>

Avant de commencer à utiliser le dictionnaire que je dois d'abord vérifier que la liste a été créée pour cette clé . P>

//Can i remove these two lines?
if(!dict.ContainsKey(key)) 
    dict[key]= new List<ValueType>;

//now use the key
dict[key].Add(value);


1 commentaires

Si je suis toujours sans mes classes utilitaires C # personnelles, un multimap est typique de la première classe que j'écris. En espérant qu'ils ajoutent cela à la bibliothèque de classe standard bientôt!


4 Réponses :



8
votes

Vous pouvez créer quelque chose comme Google Java Collection's multimap ... ou vous pouvez simplement ajouter une méthode d'extension, comme ceci: xxx

comme Bevan dit, lookup peut aider De plus - mais vous ne pouvez en créer qu'un avec le Tolookup méthode, et vous ne pouvez pas la modifier après. Dans de nombreux cas, c'est une bonne chose parfaitement bonne, mais si vous avez besoin d'une carte mutable, vous avez nié quelque chose comme ce qui précède.


0 commentaires

1
votes

Pour ajouter aux réponses, vous pouvez également ajouter une extension plus générale qui accepte un délégué pour l'instanciation: xxx

, puis vous pouvez fournir la méthode d'instanciation que vous aimez: xxx


1 commentaires

Hmm .. C'est fondamentalement ce que 280Z28 ont dit. Oh merde.



2
votes

the ConcurrentDictionary .GETORADDD code> La méthode est incroyablement utile.

public static TValue GetOrAdd<TKey, TValue>(
    this IDictionary<TKey, TValue> dictionary,
    TKey key,
    Func<TKey, TValue> valueFactory)
{
    TValue value;
    if (!dictionary.TryGetValue(key, out value))
    {
        value = valueFactory(key);
        dictionary.Add(key, value);
    }

    return value;
}


0 commentaires