for
とforeach
ループの主な違いは何ですか?
使用できるシナリオと使用できfor
ないシナリオforeach
、およびその逆。
簡単なプログラムで表示することはできますか?
どちらも私には同じように見えます。それらを区別することはできません。
for
ループは、「この操作をn回実行する」という構成です。
foreach
ループは、「このIEnumerable内の各値/オブジェクトに対してこの操作を実行する」という構成です。
foreach
反復するオブジェクトがインターフェースを実装している場合に使用できIEnumerable
ます。for
インデックスでのみオブジェクトにアクセスできる場合に使用する必要があります。
より一般的なアプローチでこれに答えようとします:
foreach
指定されたセットまたはリスト ( を実装するものIEnumerable
) の各要素を定義済みの方法で反復処理するために使用されます。コンテナーによって決定されるため、正確な順序に影響を与えることはできません (エントリをスキップするか、ループ全体をキャンセルする以外)。
foreach (String line in document) { // iterate through all elements of "document" as String objects
Console.Write(line); // print the line
}
for
は、ループに入る前にコードを実行し、反復ごとに 1 回実行するループを作成するもう 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
可能で適用可能な場合は、常に not を使用しますfor
(配列インデックスがあると仮定して)。内部データ編成によっては、インデックスforeach
を使用するよりもはるかに高速になる場合for
があります (特に、リンクされたリストを使用する場合)。
foreach に関しては、誰もが正しい答えをくれました。つまり、IEnumerable を実装する要素をループする方法です。
一方、 for は他の回答に示されているものよりもはるかに柔軟です。実際、 for は、指定された条件が真である限り、ステートメントのブロックを実行するために使用されます。
マイクロソフトのドキュメントから:
for (initialization; test; increment)
statement
初期化が必要です。表現。この式は、ループが実行される前に一度だけ実行されます。
テスト 必須。ブール式。テストが真の場合、ステートメントが実行されます。テストが false の場合、ループは終了します。
増分 必須。表現。インクリメント式は、ループを通過するたびに最後に実行されます。
ステートメント オプション。test が true の場合に実行されるステートメント。複合ステートメントにすることができます。
これは、さまざまな方法で使用できることを意味します。古典的な学校の例は、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);
foreachは以下とほぼ同等です:
var enumerator = list.GetEnumerator();
var element;
while(enumerator.MoveNext()){
element = enumerator.Current;
}
また、「foreach」準拠のパターンを実装するには、 MoveNext()メソッド、Reset()メソッド、およびCurrentプロパティを持つオブジェクトを返すメソッドGetEnumerator()を持つクラスを提供する必要があります。
実際、IEnumerable も IEnumerator も実装する必要はありません。
いくつかの派生ポイント:
foreach
コレクションの長さを知る必要がないため、「ストリーム」または一種の「要素プロデューサー」を反復処理できます。foreach
は (ほとんどの場合) イテレータで仮想メソッドを呼び出すため、 よりもパフォーマンスが低下する可能性がありますfor
。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 の方が便利で、書きやすく、安全です。アイテムの数を間違えることはありません。
たとえば、コレクション内のすべてのアイテムを処理する必要がある場合、またはそれらを逆の順序で処理する必要がある場合は、for ループが唯一の実用的な方法です。
最大の違いは、foreach ループがコレクション内の各要素のインスタンスを順番に処理するのに対し、for ループは任意のデータを処理でき、コレクション要素だけに限定されないことです。これは、for ループがコレクションを変更できることを意味します。これは違法であり、foreach ループでエラーが発生します。
for ループは、ループを実行する回数を事前に指定または決定している場合に役立ちます。例として、曜日ごとにプロセスを実行する必要がある場合、7 つのループが必要であることがわかります。
foreach ループは、コレクションまたは配列のすべての部分に対してプロセスを繰り返したい場合ですが、特にループの実行回数は重要ではありません。例として、ユーザーのお気に入りの本のリストをフォーマットしています。すべてのユーザーが異なる数の本を持っているか、まったく持っていない可能性があります。実際に何冊あるかは気にしません。ループをそれらすべてに作用させたいだけです。
foreach は、配列またはその他の IEnumerable データ コレクションがある場合に便利です。ただし、インデックスでアクセスできる配列の要素にアクセスするために使用できます。
c# の for ループと foreach ループの主な違いは、その動作によって理解できます。
for ループ:
foreach ループ:
foreach ループの場合、ループの変数 while は、配列の下の値の型と同じになります。
Foreach ステートメントは、配列またはオブジェクト コレクション内の各要素に対して一連の埋め込みステートメントを繰り返します。
foreach ループでは、ループ境界の最小値または最大値を指定する必要はありません。---> これが for each ループの利点であると言えます。
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.
foreach ステートメントは、配列内の各要素、または System.Collections.IEnumerable または System.Collections.Generic.IEnumerable インターフェイスを実装するオブジェクト コレクションの埋め込みステートメントのグループを繰り返します。foreach ステートメントは、コレクションを反復処理して必要な情報を取得するために使用されますが、予期しない副作用を避けるために、ソース コレクションからアイテムを追加または削除するために使用することはできません。ソース コレクションからアイテムを追加または削除する必要がある場合は、for ループを使用します。