Получение i-го значения из SortedList или SortedDictionary

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

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


person Grzenio    schedule 24.10.2008    source источник


Ответы (4)


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

список.Значения[список.Количество / 2];

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

person Neil    schedule 24.10.2008
comment
Ура, это работает только для SortedList. Есть ли способ сделать это для SortedDictionary? - person Grzenio; 24.10.2008

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

list.Values[index] 

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

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

dict.ElementAt(index).Value

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

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

person Godeke    schedule 24.10.2008

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

sortedDictionaryName.ElementAt(index);

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

sortedDictionaryName.ElementAt(index).Key //For only Key
sortedDictionaryName.ElementAt(index).Value //For only Value
person mudrak patel    schedule 26.02.2017

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

person Eyal    schedule 13.02.2010