0

コレクションがある場合:

List<T> collection;

このコレクションに対して、より効率的な 2 つのテストを実行する必要があります。

foreach(T t in collection.where(w => w.value == true))
{
     t.something = true;
}

foreach(T t in collection.where(w => w.value2 == true))
{
     t.something2 = true;
}

または

foreach(T t in collection)
{
 if (t.value == true)
  {
     //check 1
  }

  if (t.value2 == true)
  {
    //check 2
  }
}

それぞれがコレクションを反復すると思いますが、where何かが欠けていないことを確認したかったので、後者になると思いますか?

4

3 に答える 3

3

コレクションのサイズによって変わるかもしれないと思います。ただし、2番目のコードを使用します。

最初のコードは、コレクション全体を2回(ごとに1回where)繰り返し、次に各結果を1回繰り返します。

2番目のコードは、コレクション全体を1回だけ繰り返します。また、それはよりきれいです。

于 2012-11-22T14:54:14.197 に答える
3

2 番目の方がわずかに速い可能性が高いですが、その差はごくわずかです。

もっと重要なことは、物事を別の順序で行うことです。最初のコードは、最初に 1 つの条件に作用するすべての項目をループし、次に別の条件に作用します。2 番目のコードは項目を 1 回ループし、各項目の両方の条件を順番にチェックします。アイテムで何をしているかによって、違いが生じる場合があります。

于 2012-11-22T14:59:05.960 に答える
2

最初のケースではコレクションを 2 回列挙し (WhereEnumeratorチェックを行うために使用)、2 番目のケースでは 1 回だけですが、手動でチェックを行う必要があります。後者の場合は、単純な条件式を使用してアイテムの値を比較しWhereEnumerator、提供されたデリゲートを各アイテムで呼び出す必要があるため、より効率的です。

于 2012-11-22T14:58:30.390 に答える