Получение i-го значения из SortedList или SortedDictionary - PullRequest
13 голосов
/ 24 октября 2008

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

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

Ответы [ 4 ]

22 голосов
/ 24 октября 2008

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

list.Values[index] 

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

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

dict.ElementAt(index)

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

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

8 голосов
/ 24 октября 2008

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

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

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

3 голосов
/ 26 февраля 2017

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

sortedDictionaryName.ElementAt(index);

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

sortedDictionaryName.ElementAt(index).Key //For only Key
sortedDictionaryName.ElementAt(index).Value //For only Value
1 голос
/ 13 февраля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...