web-dev-qa-db-ja.com

LinkedList <T>のn番目の要素を取得するにはどうすればよいですか?

LinkedListインスタンスのn番目の要素を取得するにはどうすればよいですか?組み込みの方法はありますか、または独自の実装を導入する必要がありますか?たとえば、拡張メソッドですか?

ありがとう

22
pencilCake

ElementAt 拡張メソッドがそれを行います:

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

これはO(n)演算であるため、LinkedList<T>は、インデックスでアイテムにアクセスするためのより効率的な方法を提供しません。これを定期的に行う必要がある場合は、まずリンクリストを使用しないでください。

33
Jon Skeet

ElementAt()列挙可能拡張メソッドを使用できます。 LinkedListがランダムアクセスをネイティブでサポートしない理由は、データ構造にとってランダムアクセスがかなり非効率的なためです。頻繁に行う場合は、より適切なデータ構造の使用を検討する必要があります。

6
MikeP

list.ElementAt(n)またはlist.Skip(n - 1).First()のようにLINQでそれを行うことができますが、リンクされたリストへのインデックス付きアクセスを作成していることに気付いた場合、おそらく何かが間違っています(リンクされたリストはこれを効率的にサポートしていません)操作)。おそらく別のデータ構造がより適切でしょうか?

2
Jon

リストの2番目の要素を取得する必要がありました(2番目に基づいて1番目のアイテムの値を更新するため)

2つのアイテムがあることを確認するために必要な手順を実行していると仮定すると、これを簡単に実行できます。

list.First.Next.Value
1
Simon_Weaver