web-dev-qa-db-ja.com

forとforeachの違いは何ですか?

forforeachループの大きな違いは何ですか?

どのシナリオでforではなくforeachを使用でき、またその逆も可能です。

簡単なプログラムで表示することは可能でしょうか?

どちらも私には同じように見えます。私はそれらを区別できません。

17
Chandru A

forループは、「この操作を実行するn。times "」という構文です。

foreachループは、「この操作をeachこのIEnumerableの値/オブジェクトに対して実行する」という構文です。

19
Dave Bish

私はより一般的なアプローチでこれに答えようとします:

foreachは、所定のセットまたはリストの各要素(IEnumerableを実装するもの)を事前定義された方法で反復するために使用されます。コンテナによって決定されるため、正確な順序に影響を与えることはできません(エントリをスキップするか、ループ全体をキャンセルする以外)。

foreach (String line in document) { // iterate through all elements of "document" as String objects
    Console.Write(line); // print the line
}

forは、ループに入る前と反復ごとに1回実行されるコードを持つループを記述するための別の方法です。通常、指定された回数だけコードをループするために使用されます。ここでforeachとは反対に、現在の位置に影響を与えることができます。

for (int i = 0, j = 0; i < 100 && j < 10; ++i) { // set i and j to 0, then loop as long as i is less than 100 or j is less than 10 and increase i after each iteration
    if (i % 8 == 0) { // skip all numbers that can be divided by 8 and count them in j
        ++j
        continue;
    }
    Console.Write(i);
}
Console.Write(j);

可能かつ適用可能な場合は、常にforeachではなくforを使用します(配列インデックスがあると仮定します)。内部データの構成によっては、foreachはインデックス付きのforを使用するよりもはるかに高速です(特にリンクリストを使用する場合)。

11
Mario

繰り返し処理するオブジェクトがforeachインターフェイスを実装している場合は、IEnumerableを使用できます。インデックスによってのみオブジェクトにアクセスできる場合は、forを使用する必要があります。

11
Femaref

誰もがforeachに関して正しい答えを与えました。つまり、IEnumerableを実装する何かの要素をループする方法です。

一方、forは、他の回答に示されているものよりもはるかに柔軟です。実際、forは、指定された条件が真である限り、ステートメントのブロックを実行するために使用されます。

Microsoftのドキュメントから:

for (initialization; test; increment)
     statement

初期化が必要です。表現。この式は、ループが実行される前に一度だけ実行されます。

テストが必要です。ブール式。テストが真の場合、ステートメントが実行されます。 falseの場合、ループは終了します。

必須。表現。増分式は、ループを通過するたびに実行されます。

ステートメントオプション。テストが真の場合に実行されるステートメント。複合ステートメントにすることができます。

これは、さまざまな方法で使用できることを意味します。古典的な学校の例は、1から10までの数字の合計です。

int sum = 0;
for (int i = 0; i <= 10; i++)
    sum = sum + i;

ただし、配列内の数値を合計するためにも使用できます。

int[] anArr = new int[] { 1, 1, 2, 3, 5, 8, 13, 21 };
int sum = 0;
for (int i = 0; i < anArr.Length; i++)
    sum = sum + anArr[i];

(これはforeachでも実行できます):

int[] anArr = new int[] { 1, 1, 2, 3, 5, 8, 13, 21 };
int sum = 0;
foreach (int anInt in anArr)
    sum = sum + anInt;

ただし、1〜10の偶数の合計に使用できます。

int sum = 0;
for (int i = 0; i <= 10; i = i + 2)
    sum = sum + i;

そして、あなたはこのような狂ったものを発明することさえできます:

int i = 65;
for (string s = string.Empty; s != "ABC"; s = s + Convert.ToChar(i++).ToString()) ;
    Console.WriteLine(s);

forループ:

 1) need to specify the loop bounds( minimum or maximum).

  2) executes a statement or a block of statements repeatedly 
    until a specified expression evaluates to false.

Ex1:-

int K = 0;

for (int x = 1; x <= 9; x++){
        k = k + x ;
}

foreachステートメント:

1)do not need to specify the loop bounds minimum or maximum.

2)repeats a group of embedded statements for 
     a)each element in an array 
  or b) an object collection.       

Ex2:-

int k = 0;

int[] tempArr = new int[] { 0, 2, 3, 8, 17 };

foreach (int i in tempArr){
    k = k + i ;
}
4
kallol

foreachは次とほぼ同等です:

var enumerator = list.GetEnumerator();
var element;
while(enumerator.MoveNext()){
  element = enumerator.Current;
}

「foreach」に準拠したパターンを実装するには、GetEnumerator()メソッドを持つクラスを提供する必要があります。このメソッドはMoveNext()メソッドを持つオブジェクトを返します、Reset()メソッドおよびCurrentプロパティ。

実際、IEnumerableもIEnumeratorも実装する必要はありません。

いくつかの派生点:

  • foreachはコレクションの長さを知る必要がないので、「ストリーム」または一種の「要素プロデューサー」を反復処理できます。
  • foreachは(ほとんどの場合)イテレータで仮想メソッドを呼び出すため、forよりもパフォーマンスが低下します。
3
polkduran

Forループは、ループを何回実行するかを事前に指示または決定する場合に役立ちます。例として、曜日ごとにプロセスを実行する必要がある場合、7つのループが必要であることがわかります。

Foreachループは、コレクションまたは配列のすべての部分に対してプロセスを繰り返したい場合ですが、特にループの実行回数は重要ではありません。例として、ユーザーのお気に入りの本のリストをフォーマットしています。ユーザーごとに異なる数の本を持っている場合もあれば、持っていない場合もありますが、どれだけあるかは気にしません。すべての本にループを作用させたいだけです。

2
colonelclick

それはあなたが何をしているか、そして何が必要かによって異なります。

アイテムのコレクションを反復処理し、インデックス値を気にしない場合は、foreachの方が便利で、書きやすく、安全です。アイテムの数を間違えることはありません。

たとえば、コレクションの1つおきのアイテムを処理する必要がある場合、またはそれらを逆順で処理する必要がある場合、forループが唯一の実用的な方法です。

最大の違いは、foreachループはコレクション内の各要素のインスタンスを順番に処理するのに対して、forループは任意のデータを処理でき、コレクション要素だけに制限されないことです。つまり、forループはコレクションをmodifyコレクション-違法でエラーを引き起こす可能性があることを意味しますforeachループ内。

詳細については、MSDNを参照してください: foreach および for

2
RDeveloper

foreachは、データの配列またはその他のIEnumerableコレクションがある場合に役立ちます。 forは、インデックスによってアクセスできる配列の要素にアクセスするために使用できます。

C#のforループとforeachループの主な違いは、その動作によって理解されています。

Forループ:

  1. Forループの変数は常に整数のみです。
  2. Forループは、指定された式がfalseと評価されるまで、ステートメントまたはステートメントのブロックを繰り返し実行します。
  3. Forループでは、ループの境界(最大または最小)を指定する必要があります。-------->これはforループの制限であると言えます。

Foreachループ:

  1. Foreachループの場合、ループの変数は配列の下の値の型と同じです。

  2. Foreachステートメントは、配列またはオブジェクトコレクションの各要素に対して埋め込みステートメントのグループを繰り返します。

  3. Foreachループでは、ループ境界の最小値または最大値を指定する必要はありません。--->ここでは、これがfor eachループの利点であると言えます。

1

foreach構文は迅速かつ簡単です。 for構文はもう少し複雑ですが、より柔軟です。

foreachは、コレクション内のすべてのアイテムを繰り返す場合に便利です。 forは、アイテム全体またはアイテムのサブセットを反復する場合に便利です。

foreach反復variableは各コレクションアイテムを提供し、読み取り専用であるため、アイテムを変更することはできません繰り返されます。 for構文を使用すると、必要に応じてアイテムを変更できます。

結論foreachを使用して、コレクション内のすべてのアイテムをすばやく繰り返します。 forを使用して、コレクションのアイテムのサブセットを反復するか、アイテムが反復されるときにアイテムを変更します。

0
Saideep Chhetri

次のような単純な配列にforeachを使用できます

int[] test = { 0, 1, 2, 3, ...};

また、2D配列がある場合はforを使用できます

int[][] test = {{1,2,3,4},
                {5,2,6,5,8}};
0
noonana

forとforeachの単純な違い

  for loop is working with values.it must have condition then increment and intialization also.you have to knowledge about 'how many times loop repeated'.

 foreach is working with objects and enumaretors. no need to knowledge how many times loop repeated.
0
sivasankar