29

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

ありがとう

4

4 に答える 4

38

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

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

これは O(n) 操作であることを忘れないでください。これは、LinkedList<T>インデックスによってアイテムにアクセスするより効率的な方法を提供しないためです。これを定期的に行う必要がある場合は、リンクされたリストを最初から使用しないことをお勧めします。

于 2012-04-15T17:32:07.650 に答える
6

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

于 2012-04-15T17:31:58.597 に答える
2

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

于 2012-04-15T17:32:15.480 に答える
2

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

2 つの項目があることを確認するために必要な手順を実行していると仮定すると、次のように簡単に実行できます。

list.First.Next.Value
于 2017-02-10T07:31:13.707 に答える