2008-10-24 5 views
7

У меня есть отсортированный набор объектов (это может быть либо SortedList, либо SortedDictionary, я буду использовать его в основном для чтения, поэтому добавление производительности не так важно). Как я могу получить i-е значение?Получение i-го значения из SortedList или SortedDictionary

Так, например, когда у меня есть числа 1, 2, 3, 4, 5 в коллекции, и я хочу медиану (так что 3 в этом примере), как я могу это сделать?

ответ

7

Попробуйте что-то вроде этого:

list.Values ​​[list.Count/2];

Обратите внимание, что истинная медиана будет усреднять два числа в середине, если граф четный.

+1

Ура, эта работа только для SortedList. Есть ли способ сделать это для SortedDictionary? – Grzenio 2008-10-24 16:24:40

21

Вы можете использовать код как

list.Values[index] 

для отсортированного списка.

Самый простой способ с SortedDictonary будет использовать метод ElementAt():

dict.ElementAt(index) 

Однако это происходит медленнее, чем в случае списка.

В любом случае вам необходимо проверить свой счет. Если это нечетно, возьмите index = (list.length-1)/2). Если он четный, возьмите index1 = list.length/2 AND index2 = list.length/2 - 1 и усредните значения.

1

Если вам нужно получить элемент по индексу в SortedDictionary много раз, производительность будет жалкой. Создайте новый SortedList с SortedDictionary в качестве входных данных и получите доступ к SortedList. Работает много, много раз быстрее.

2

Вы можете извлечь значение в определенном положении с помощью ниже синтаксис:

sortedDictionaryName.ElementAt(index); 

Если вы хотите извлечь ключ или значение элемента в желаемом индекс:

sortedDictionaryName.ElementAt(index).Key //For only Key 
sortedDictionaryName.ElementAt(index).Value //For only Value