Beaucoup de fois que je dois créer un dictionnaire 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);
4 Réponses :
Vous pouvez créer quelque chose comme Google Java Collection's multimap ... ou vous pouvez simplement ajouter une méthode d'extension, comme ceci: comme Bevan dit, lookup code> peut aider De plus - mais vous ne pouvez en créer qu'un avec le
Tolookup code>
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. P> p>
Pour ajouter aux réponses, vous pouvez également ajouter une extension plus générale qui accepte un délégué pour l'instanciation: , puis vous pouvez fournir la méthode d'instanciation que vous aimez: p>
Hmm .. C'est fondamentalement ce que 280Z28 ont dit. Oh merde.
the ConcurrentDictionary
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; }
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!