for
とforeach
ループの大きな違いは何ですか?
どのシナリオでfor
ではなくforeach
を使用でき、またその逆も可能です。
簡単なプログラムで表示することは可能でしょうか?
どちらも私には同じように見えます。私はそれらを区別できません。
for
ループは、「この操作を実行するn。times "」という構文です。
foreach
ループは、「この操作をeachこのIEnumerableの値/オブジェクトに対して実行する」という構文です。
私はより一般的なアプローチでこれに答えようとします:
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
を使用するよりもはるかに高速です(特にリンクリストを使用する場合)。
繰り返し処理するオブジェクトがforeach
インターフェイスを実装している場合は、IEnumerable
を使用できます。インデックスによってのみオブジェクトにアクセスできる場合は、for
を使用する必要があります。
誰もが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.
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.
int k = 0;
int[] tempArr = new int[] { 0, 2, 3, 8, 17 };
foreach (int i in tempArr){
k = k + i ;
}
foreachは次とほぼ同等です:
var enumerator = list.GetEnumerator();
var element;
while(enumerator.MoveNext()){
element = enumerator.Current;
}
「foreach」に準拠したパターンを実装するには、GetEnumerator()メソッドを持つクラスを提供する必要があります。このメソッドはMoveNext()メソッドを持つオブジェクトを返します、Reset()メソッドおよびCurrentプロパティ。
実際、IEnumerableもIEnumeratorも実装する必要はありません。
いくつかの派生点:
foreach
はコレクションの長さを知る必要がないので、「ストリーム」または一種の「要素プロデューサー」を反復処理できます。foreach
は(ほとんどの場合)イテレータで仮想メソッドを呼び出すため、for
よりもパフォーマンスが低下します。Forループは、ループを何回実行するかを事前に指示または決定する場合に役立ちます。例として、曜日ごとにプロセスを実行する必要がある場合、7つのループが必要であることがわかります。
Foreachループは、コレクションまたは配列のすべての部分に対してプロセスを繰り返したい場合ですが、特にループの実行回数は重要ではありません。例として、ユーザーのお気に入りの本のリストをフォーマットしています。ユーザーごとに異なる数の本を持っている場合もあれば、持っていない場合もありますが、どれだけあるかは気にしません。すべての本にループを作用させたいだけです。
それはあなたが何をしているか、そして何が必要かによって異なります。
アイテムのコレクションを反復処理し、インデックス値を気にしない場合は、foreachの方が便利で、書きやすく、安全です。アイテムの数を間違えることはありません。
たとえば、コレクションの1つおきのアイテムを処理する必要がある場合、またはそれらを逆順で処理する必要がある場合、forループが唯一の実用的な方法です。
最大の違いは、foreachループはコレクション内の各要素のインスタンスを順番に処理するのに対して、forループは任意のデータを処理でき、コレクション要素だけに制限されないことです。つまり、forループはコレクションをmodifyコレクション-違法でエラーを引き起こす可能性があることを意味しますforeachループ内。
foreachは、データの配列またはその他のIEnumerableコレクションがある場合に役立ちます。 forは、インデックスによってアクセスできる配列の要素にアクセスするために使用できます。
C#のforループとforeachループの主な違いは、その動作によって理解されています。
Forループ:
Foreachループ:
Foreachループの場合、ループの変数は配列の下の値の型と同じです。
Foreachステートメントは、配列またはオブジェクトコレクションの各要素に対して埋め込みステートメントのグループを繰り返します。
Foreachループでは、ループ境界の最小値または最大値を指定する必要はありません。--->ここでは、これがfor eachループの利点であると言えます。
foreach構文は迅速かつ簡単です。 for構文はもう少し複雑ですが、より柔軟です。
foreachは、コレクション内のすべてのアイテムを繰り返す場合に便利です。 forは、アイテム全体またはアイテムのサブセットを反復する場合に便利です。
foreach反復variableは各コレクションアイテムを提供し、読み取り専用であるため、アイテムを変更することはできません繰り返されます。 for構文を使用すると、必要に応じてアイテムを変更できます。
結論foreachを使用して、コレクション内のすべてのアイテムをすばやく繰り返します。 forを使用して、コレクションのアイテムのサブセットを反復するか、アイテムが反復されるときにアイテムを変更します。
次のような単純な配列にforeachを使用できます
int[] test = { 0, 1, 2, 3, ...};
また、2D配列がある場合はforを使用できます
int[][] test = {{1,2,3,4},
{5,2,6,5,8}};
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.