2012-04-15 24 views
17

LinkedListインスタンスのn番目の要素を取得するにはどうすればよいですか?組み込みの方法はありますか、自分の実装を導入する必要があるかもしれませんか?例えば、拡張メソッド?LinkedList内のn番目の要素を取得するには<T>?

おかげ

+1

まず、なぜですか?確かにリンクされたリストが必要ですか? – alexn

+0

私は、LinkedListデータ構造にInsertAt(int i)のようなメソッドを使用するInsertedSortListの1つの例を持っています。だから私は尋ねたがっています。 – pencilCake

+0

それはSOかMSDNドキュメントですか? –

答えて

27

ElementAt拡張メソッドは、それを行います。

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

LinkedList<T>がインデックスによって項目にアクセスし、任意のより効率的な方法を提供していないので、これはO(n)の操作であることを忘れないでください。これを定期的に行う必要がある場合は、まずリンク先リストを使用しないでください。

+8

Microsoftは、文書に複雑さを加えてください:) –

+0

@Jonはニックピッキングしないでください。しかし、 'IList 'を実装すると、インデックス作成操作は 'O(n)'できなくなりますか? – nawfal

+1

@nawfal:編集します。 –

6

あなたはElementAt()可算拡張メソッドを使用することができます。 LinkedListがランダムアクセスをネイティブにサポートしていないのは、データ構造の操作が非効率的なためです。それを頻繁にやっていくつもりなら、より適切なデータ構造を使うことを考えるべきです。

2

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

0

私はあなたが単にあなたができる2つのアイテムを持っているかを確認するために必要な措置を取っていると仮定すると、

(第二に基づく第一項目の値を更新するために)私のリストの2番目の要素を取得するために必要これを行う:

list.First.Next.Value 
関連する問題