2016-04-08 11 views
-1

私のリストが非常に大きいので、forまたはforeachループを使わずに、私のリストから要素またはそのリストを取り出したいと思います。アルゴリズムの複雑さを見ると、2つのループを相互に使用するのは良い考えではありません。ループなしでリストから要素を取得する

+0

どのように要素を決定しますか?インデックス、条件? – fubo

+0

HashTableが役立つかもしれません。 – zypro

+1

確かに私はオブジェクトのリストを持っています、時々私はプロパティ上の条件を必要とし、私はidを使用する一つの要素を取得します。 –

答えて

-3

ルーピングなしでリストから1つの要素を取得できる場合は、リストから1つの要素を得ることができるLINQ(firstOrdefault、Single、SingleOrdefault)関数を使用できます。どこでToListを使ってcast.allの最後にこれらの関数をラムダ式のパラメータとして取ります。 また、私は右だ理由を参照するには、これらのリンクをチェック:

を限り、あなたは大きなサイズのコレクションを持っているように、LINQは正しい選択です。

+5

Linqはループ(内部)を使用します – fubo

+3

はい、通常のループより時間がかかりません。それを試し、実行時間を計算して結果を確認してください。 –

+0

LINQは確かに行く方法です。読みやすくメンテナンス可能なコード。少し遅くなります(無関係のケースの99%)。 –

3

答えは、どの要素を求めるかによって決まります。事実は、あなたが探したい要素のインデックスを持っていれば、ListはO(1)の複雑さになります。それ以外の場合は、常にO(n)の複雑さ(LINQかどうか)を持ちます。

あなたのコレクションの多くの要素を抽出し、それらの上にループを使用する必要がある場合は、LINQは、簡単に(あなたのコレクションのすべての要素に)一つだけのループでそれを行うことができます:

foreach (var element in myCollection.Where(myCondition)) 

O(n)より複雑な要素を探したい場合はHashSet<T>Dictionary<TKey, TValue>を見てください。

しかし、あなたの質問は、より具体的な回答を得るほど正確ではありません。

関連する問題