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.

236voto

Jon Skeet Points 692016

Si vous utilisez .NET 3.5, utilisez la fonction Lookup classe.

EDIT : Vous créez généralement un Lookup en utilisant Enumerable.ToLookup . Cela suppose que vous n'ayez pas besoin de le modifier par la suite, mais je trouve généralement que c'est suffisant.

Si cela n'a pas pour vous, je ne pense pas qu'il y ait quoi que ce soit dans le cadre qui puisse vous aider - et utiliser le dictionnaire est aussi bon que possible :(

185voto

La classe List fonctionne en fait très bien pour les collections de clés/valeurs contenant des doublons, lorsque vous souhaitez itérer sur la collection. Exemple :

List<KeyValuePair<string, string>> list = new List<KeyValuePair<string, string>>();

// add some values to the collection here

for (int i = 0;  i < list.Count;  i++)
{
    Print(list[i].Key, list[i].Value);
}

43voto

Hector Correa Points 10408

Voici une façon de procéder avec List< KeyValuePair< string, string > >.

public class ListWithDuplicates : List<KeyValuePair<string, string>>
{
    public void Add(string key, string value)
    {
        var element = new KeyValuePair<string, string>(key, value);
        this.Add(element);
    }
}

var list = new ListWithDuplicates();
list.Add("k1", "v1");
list.Add("k1", "v2");
list.Add("k1", "v3");

foreach(var item in list)
{
    string x = string.format("{0}={1}, ", item.Key, item.Value);
}

Sorties k1=v1, k1=v2, k1=v3

25voto

Matt Points 11264

Si vous utilisez des chaînes de caractères à la fois comme clés et comme valeurs, vous pouvez utiliser la commande System.Collections.Specialized.NameValueCollection qui renvoie un tableau de valeurs de type chaîne via la méthode GetValues(string key).

19voto

Je viens de tomber sur le PowerCollections qui comprend, entre autres, une classe appelée MultiDictionary. Elle permet d'envelopper proprement ce type de fonctionnalité.

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