web-dev-qa-db-de.com

Wie bekomme ich das n-te Element in eine LinkedList <T>?

Wie kann ich das n-te Element einer LinkedList-Instanz abrufen? Gibt es eine integrierte Möglichkeit, oder muss ich möglicherweise meine eigene Implementierung einführen? Zum Beispiel eine Erweiterungsmethode?

Vielen Dank

19
pencilCake

Die Erweiterungsmethode ElementAt macht dies:

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

Vergessen Sie nicht, dass dies eine O(n) -Operation ist, da LinkedList<T> keinen effizienteren Zugriff auf ein Element nach Index bietet. Wenn Sie dies regelmäßig tun müssen, sollten Sie zunächst keine verknüpfte Liste verwenden.

29
Jon Skeet

Sie können die Enumerable-Erweiterungsmethode ElementAt () verwenden. Der Grund, dass LinkedList den Direktzugriff nicht nativ unterstützt, liegt darin, dass dies eine ineffiziente Operation für die Datenstruktur ist. Wenn Sie dies häufig tun, sollten Sie eine geeignetere Datenstruktur in Betracht ziehen.

6
MikeP

Sie können dies mit LINQ wie in list.ElementAt(n) oder list.Skip(n - 1).First() tun, aber wenn Sie feststellen, dass Sie einen indizierten Zugriff auf eine verknüpfte Liste vornehmen, tun Sie wahrscheinlich etwas falsches (verknüpfte Listen unterstützen diesen Vorgang nicht effizient). Vielleicht wäre eine andere Datenstruktur angemessener?

2
Jon

Ich musste das zweite Element meiner Liste abrufen (um einen Wert für das erste Element basierend auf dem zweiten Element zu aktualisieren).

Angenommen, Sie ergreifen die notwendigen Schritte, um sicherzustellen, dass Sie zwei Elemente haben, die Sie einfach tun können:

list.First.Next.Value
0
Simon_Weaver