278 votes

Duplication des clés dans les dictionnaires .NET ?

Existe-t-il des classes de dictionnaire dans la bibliothèque de classes de base .NET qui permettent d'utiliser des clés doubles ? La seule solution que j'ai trouvée est de créer, par exemple, une classe du type :

Dictionary<string, List<object>>

Mais c'est assez irritant à utiliser. En Java, je crois qu'un MultiMap accomplit cela, mais je ne trouve pas d'analogue en .NET.

14voto

MADMap Points 1297

Je pense que quelque chose comme List<KeyValuePair<object, object>> ferait l'affaire.

14voto

TheSoftwareJedi Points 15921

Remarque très importante concernant l'utilisation de Lookup :

Vous pouvez créer une instance d'un Lookup(TKey, TElement) en appelant ToLookup sur un objet qui implémente IEnumerable(T)

Il n'y a pas de constructeur public pour créer une nouvelle instance d'un objet Lookup(TKey, TElement) . En outre, Lookup(TKey, TElement) sont immuables, c'est-à-dire que vous ne pouvez pas ajouter ou supprimer des éléments ou des clés d'un objet Lookup(TKey, TElement) après sa création.

(de MSDN)

Je pense que ce serait un obstacle pour la plupart des utilisations.

11voto

Si vous utilisez >= .NET 4 alors vous pouvez utiliser Tuple La classe :

// declaration
var list = new List<Tuple<string, List<object>>>();

// to add an item to the list
var item = Tuple<string, List<object>>("key", new List<object>);
list.Add(item);

// to iterate
foreach(var i in list)
{
    Console.WriteLine(i.Item1.ToString());
}

5voto

Yuval Points 1071

Jetez un coup d'œil à C5's HashBag classe.

4voto

Dan Points 21

En réponse à la question initiale. Quelque chose comme Dictionary<string, List<object>> est implémenté dans une classe appelée MultiMap dans Le Code Project .

Vous pouvez trouver plus d'informations sur le lien ci-dessous : http://www.codeproject.com/KB/cs/MultiKeyDictionary.aspx

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