Quelle est la principale différence entre les boucles for
et foreach
?
Dans quels scénarios pouvons-nous utiliser for
et non pas foreach
et vice versa.
Serait-il possible de montrer avec un programme simple?
Les deux me semblent identiques. Je ne peux pas les différencier.
une boucle for
est une construction qui dit "effectue cette opération n. fois ".
une boucle foreach
est une construction qui dit "effectue cette opération contre each value/object dans cet IEnumerable"
Je vais essayer d'y répondre d'une manière plus générale:
foreach
est utilisé pour parcourir chaque élément d'un ensemble ou d'une liste donnés (tout ce qui implémente IEnumerable
) d'une manière prédéfinie. Vous ne pouvez pas influencer l'ordre exact (autre que sauter des entrées ou annuler la boucle entière), tel que déterminé par le conteneur.
foreach (String line in document) { // iterate through all elements of "document" as String objects
Console.Write(line); // print the line
}
for
est simplement un autre moyen d'écrire une boucle dont le code est exécuté avant d'entrer dans la boucle et une fois après chaque itération. Il est généralement utilisé pour parcourir le code un nombre de fois donné. Contrairement à foreach
, vous pouvez influencer la position actuelle.
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);
Si possible et applicable, utilisez toujours foreach
plutôt que for
(en supposant qu'il existe un index de tableau). Selon l'organisation des données interne, foreach
peut être beaucoup plus rapide que d'utiliser for
avec un index (en particulier lors de l'utilisation de listes liées).
Vous pouvez utiliser foreach
si l'objet sur lequel vous souhaitez effectuer une itération implémente l'interface IEnumerable
. Vous devez utiliser for
si vous ne pouvez accéder à l'objet que par index.
Tout le monde vous a donné la bonne réponse en ce qui concerne foreach, c’est-à-dire un moyen de parcourir en boucle les éléments de quelque chose mettant en œuvre IEnumerable.
De l'autre côté, pour est beaucoup plus souple que ce qui est montré dans les autres réponses. En fait, for est utilisé pour exécuter un bloc d'instructions tant qu'une condition spécifiée est vraie.
De la documentation Microsoft:
for (initialization; test; increment)
statement
initialisation Obligatoire. Une expression. Cette expression est exécutée une seule fois, avant que la boucle ne soit exécutée.
test Obligatoire. Une expression booléenne. Si test est vrai, l'instruction est exécutée. Si test est égal à false, la boucle est terminée.
incrément Obligatoire. Une expression. L'expression d'incrément est exécutée à la fin de chaque passage dans la boucle.
statement Facultatif. Instruction à exécuter si test est vrai. Peut être une déclaration composée.
Cela signifie que vous pouvez l'utiliser de différentes manières. Les exemples scolaires classiques sont la somme des nombres de 1 à 10:
int sum = 0;
for (int i = 0; i <= 10; i++)
sum = sum + i;
Mais vous pouvez également l'utiliser pour additionner les nombres d'un tableau:
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];
(cela aurait pu être fait avec un foreach aussi):
int[] anArr = new int[] { 1, 1, 2, 3, 5, 8, 13, 21 };
int sum = 0;
foreach (int anInt in anArr)
sum = sum + anInt;
Mais vous pouvez l’utiliser pour la somme des nombres pairs de 1 à 10:
int sum = 0;
for (int i = 0; i <= 10; i = i + 2)
sum = sum + i;
Et vous pouvez même inventer une chose folle comme celle-ci:
int i = 65;
for (string s = string.Empty; s != "ABC"; s = s + Convert.ToChar(i++).ToString()) ;
Console.WriteLine(s);
pour la boucle:
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 ;
}
déclaration 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 ;
}
Une boucle for est utile lorsque vous avez une indication ou une détermination, à l'avance, du nombre de fois que vous souhaitez exécuter une boucle. Par exemple, si vous devez effectuer un processus pour chaque jour de la semaine, vous savez que vous voulez 7 boucles.
Une boucle foreach consiste à répéter un processus pour tous les éléments d'une collection ou d'un tableau, mais le nombre de fois que la boucle s'exécute n'a pas d'importance particulière. Par exemple, vous formatez une liste de livres favoris pour les utilisateurs. Chaque utilisateur peut avoir un nombre différent de livres, voire aucun, et nous ne nous soucions pas vraiment de leur nombre, nous voulons simplement que la boucle agisse sur chacun d'eux.
foreach est presque équivalent à:
var enumerator = list.GetEnumerator();
var element;
while(enumerator.MoveNext()){
element = enumerator.Current;
}
et afin d’implémenter un motif conforme "foreach", il est nécessaire de fournir une classe qui a une méthode GetEnumerator () qui retourne un objet qui a un MoveNext () méthode, un Reset ( ) méthode et a Actuel propriété.
En effet, vous n'avez pas besoin d'implémenter ni IEnumerable ni IEnumerator.
Cela dépend de ce que vous faites et de ce dont vous avez besoin.
Si vous parcourez une collection d'éléments sans vous soucier des valeurs d'indice, il est plus pratique, plus facile à écrire et plus sûr: vous ne pouvez pas obtenir un nombre erroné d'éléments.
Si vous devez traiter chaque deuxième élément d'une collection, par exemple, ou les traiter dans l'ordre inverse, la boucle for est le seul moyen pratique.
Les différences les plus importantes sont qu’une boucle foreach traite une instance de chaque élément d’une collection à son tour, alors qu’une boucle for peut fonctionner avec toutes les données et ne se limite pas aux seuls éléments de la collection. Cela signifie qu'une boucle for peut modifier une collection - ce qui est illégal et provoquera une erreur dans une boucle foreach.
foreach est utile si vous avez un tableau ou une autre collection de données IEnumerable. mais for peut être utilisé pour les éléments d’accès d’un tableau auquel on peut accéder par leur index.
La différence majeure entre les boucles for et foreach dans c # se comprend par son fonctionnement:
La boucle for:
La boucle foreach:
Dans le cas de la boucle foreach, la variable de la boucle est identique au type des valeurs sous le tableau.
L'instruction Foreach répète un groupe d'instructions incorporées pour chaque élément d'un tableau ou d'une collection d'objets.
Pour chaque boucle, vous n'avez pas besoin de spécifier les limites de la boucle minimum ou maximum .---> Ici, nous pouvons dire que c'est l'avantage de la boucle pour chaque boucle.
foreach la syntaxe est simple et rapide. pour la syntaxe est un peu plus complexe, mais est aussi plus flexible.
foreach est utile lors de l'itération de tous les éléments d'une collection. for est utile lors de l'itération de l'ensemble ou d'un sous-ensemble d'éléments.
Le foreach iteration variable qui fournit chaque élément de la collection est en lecture seule, nous ne pouvons donc pas modifier les éléments car ils sont itérés. En utilisant la syntaxe pour , nous pouvons modifier les éléments selon les besoins.
En bout de ligne, utilisez pour chaque pour itérer rapidement tous les éléments d’une collection. Utilisez pour pour itérer un sous-ensemble des éléments de la collection ou pour modifier les éléments au fur et à mesure de leur itération.
Vous pouvez utiliser le foreach pour un tableau simple comme
int[] test = { 0, 1, 2, 3, ...};
Et vous pouvez utiliser le pour quand vous avez un tableau 2D
int[][] test = {{1,2,3,4},
{5,2,6,5,8}};
simple différence entre for et 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.