2008-10-24 7 views
7

J'ai une collection triée d'objets (elle peut être soit SortedList, soit SortedDictionary, je l'utiliserai principalement pour la lecture donc ajouter de la performance n'est pas si important). Comment puis-je obtenir la valeur i-ième?Obtenir la valeur i-th d'une SortedList ou SortedDictionary

Ainsi, par exemple. quand j'ai les nombres 1, 2, 3, 4, 5 dans la collection et que je veux la médiane (donc 3 dans cet exemple), comment puis-je le faire?

Répondre

7

Essayez quelque chose comme ceci:

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

Notez qu'une vraie médiane ferait la moyenne des deux nombres au milieu si Count est pair.

+1

Cheers, ce travail pour SortedList seulement si. Existe-t-il un moyen de le faire pour SortedDictionary? – Grzenio

21

Vous pouvez utiliser le code

list.Values[index] 

pour une liste triée.

La façon la plus simple avec un SortedDictonary serait d'utiliser la méthode ElementAt():

dict.ElementAt(index) 

Cependant, cela est plus lent que dans le cas de la liste.

Dans les deux cas, vous devez vérifier votre nombre. Si c'est impair, prenez index = (list.length-1)/2). Si c'est pair, prenez index1 = list.length/2 AND index2 = list.length/2 - 1 et faites la moyenne des valeurs.

1

Si vous avez besoin d'obtenir un élément par index dans un SortedDictionary plusieurs fois, la performance est misérable. Faire une nouvelle SortedList avec le SortedDictionary comme entrée et accéder à la SortedList. Fonctionne beaucoup, beaucoup plus vite.

2

Vous pouvez extraire de la valeur à une position particulière en utilisant la syntaxe suivante:

sortedDictionaryName.ElementAt(index); 

Si vous voulez extraire la clé ou la valeur d'un élément à un index désiré:

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