web-dev-qa-db-fra.com

Comment obtenir le n-ième élément dans une LinkedList <T>?

Comment puis-je obtenir le n-ième élément d'une instance LinkedList? Existe-t-il une méthode intégrée ou pourrais-je avoir besoin de présenter ma propre implémentation? Par exemple une méthode d'extension?

Merci

19
pencilCake

La méthode ElementAt extension le fera:

// This is 0-based of course
var value = linkedList.ElementAt(n);

N'oubliez pas qu'il s'agit d'une opération O(n), car LinkedList<T> ne fournit pas de moyen plus efficace d'accéder à un élément par index. Si vous devez le faire régulièrement, cela signifie que vous ne devriez pas utiliser de liste chaînée pour commencer.

29
Jon Skeet

Vous pouvez utiliser la méthode d'extension énumérable ElementAt (). La raison pour laquelle LinkedList ne prend pas en charge l'accès aléatoire de manière native, c'est parce que c'est une opération plutôt inefficace pour la structure de données. Si vous le faites souvent, vous devriez penser à utiliser une structure de données plus appropriée.

6
MikeP

Vous pouvez le faire avec LINQ comme dans list.ElementAt(n) ou list.Skip(n - 1).First(), mais si vous vous trouvez en train d'effectuer un accès indexé dans une liste chaînée, vous ferez probablement quelque chose de mal (les listes chaînées ne prennent pas efficacement en charge cette opération). Peut-être qu'une autre structure de données serait plus appropriée?

2
Jon

J'avais besoin d'obtenir le deuxième élément de ma liste (pour mettre à jour une valeur sur le premier élément en fonction du deuxième)

En supposant que vous preniez les mesures nécessaires pour vous assurer de disposer de deux éléments, vous pouvez simplement le faire:

list.First.Next.Value
0
Simon_Weaver