2008-10-24 9 views
7

Tengo una colección ordenada de objetos (puede ser SortedList u SortedDictionary, la usaré principalmente para leer, así que agregar rendimiento no es tan importante). ¿Cómo puedo obtener el valor i-ésimo?Obtener i-ésimo valor de una SortedList u SortedDictionary

Así, por ejemplo, cuando tengo los números 1, 2, 3, 4, 5 en la colección y quiero la mediana (entonces 3 en este ejemplo), ¿cómo puedo hacerlo?

Respuesta

7

Pruebe algo como esto:

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

Tenga en cuenta que una mediana verdadera promediaría los dos números en el medio si Count es par.

+1

Cheers, este trabajo solo para SortedList. ¿Hay alguna manera de hacerlo para SortedDictionary? – Grzenio

21

Puede usar un código como

list.Values[index] 

para una lista ordenada.

La forma más fácil con un SortedDictonary sería utilizar el método ElementAt():

dict.ElementAt(index) 

Sin embargo, esto es más lenta que en el caso de la lista.

En cualquier caso, debe verificar su conteo. Si es impar, tome index = (list.length-1)/2). Si es par, tome index1 = list.length/2 AND index2 = list.length/2 - 1 y promedie los valores.

1

Si necesita obtener un elemento por índice en un SortedDictionary muchas veces, el rendimiento es miserable. Haga una nueva SortedList con SortedDictionary como entrada y acceda a SortedList. Funciona muchas, muchas veces más rápido.

2

Puede extraer valor en una posición particular usando la siguiente sintaxis:

sortedDictionaryName.ElementAt(index); 

Si desea extraer clave o el valor de un elemento en un índice deseado:

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