2009-09-15 5 views
4

J'ai lu here que SortedDictionary n'autorise pas la récupération indexée contrairement à SortedList. Alors comment puis-je obtenir le nameAddr["C"] correctement dans l'extrait de code suivant?Récupération indexée SortedDictionary <>

 SortedDictionary<string, string> nameAddr = new SortedDictionary<string, string>(); 
     nameAddr.Add("X", "29"); 
     nameAddr.Add("A", "30"); 
     nameAddr.Add("C", "44");   

     Console.WriteLine(nameAddr["C"]); 

Répondre

5

C'est l'indexation par clé. SortedList permet l'indexation par "index de clé", par ex. nameAddr.Values[1] renverrait "44".

Par exemple (la collection ne pas permettre l'indexation de la paire nom/valeur, il suffit de chacun des Keys et Values séparément.):

var list = new SortedList<string, string> 
{ 
    { "X", "29" }, 
    { "A", "30" }, 
    { "C", "44" }, 
}; 

Console.WriteLine(list.Keys[1]); // Prints "C" 
Console.WriteLine(list.Values[1]); // Prints "44" 
5

SortedList utilise en interne un réseau en tant que données structure pour le stockage et puis trie juste le tableau comme nécessaire pour garder les éléments dans l'ordre. Comme il utilise un tableau, les éléments peuvent être accédés en utilisant un index numérique comme vous le feriez pour n'importe quel tableau. En interne, SortedDictionary utilise un arbre de recherche binaire rouge-noir pour conserver les éléments dans l'ordre. Le concept est complètement différent. Il n'y a aucun tableau et aucun analogue pour récupérer les articles par un index numérique. Votre seule option consiste à utiliser la partie clé de la paire valeur/clé qui a été ajoutée au dictionnaire.

Cela dit. Votre code me semble correct. C'est le seul moyen de récupérer des éléments du dictionnaire (autre que l'utilisation de la collection Values, mais cela ne vous donnera pas non plus la capacité d'indexation numérique).