2009-09-15 2 views
4

Я прочитал here, что SortedDictionary не позволяет индексировать извлечение в отличие от SortedList. Тогда как я могу получить nameAddr["C"] в следующем фрагменте кода?Индексированный поиск 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"]); 

ответ

5

Это индексация ключа. SortedList позволяет индексировать «индекс ключа», например. nameAddr.Values[1] вернется «44».

(Коллекция не позволяет индексировать пары имя/значение, только каждого из Keys и Values отдельно.)

Например:

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 внутренне использует массив данных в качестве структуру для хранения, а затем просто сортирует массив по мере необходимости, чтобы сохранить элементы в порядке. Поскольку он использует массив, элементы могут быть доступны с помощью числового индекса, как и для любого массива.

SortedDictionary внутренне использует дерево черно-белого дерева поиска, чтобы сохранить порядок в порядке. Концепция совершенно другая. Нет никакого массива и нет аналога для извлечения элементов с помощью числового индекса. Ваш единственный вариант - использовать ключевую часть пары ключ-значение, которая была добавлена ​​в словарь.

С учетом сказанного. Ваш код выглядит правильно для меня. Это единственный способ получить элементы из словаря (кроме использования коллекции «Значения», но это также не даст вам числовой способности индексирования).

Смежные вопросы