Existe-t-il un moyen de coder une boucle for pour qu'elle ne s'incrémente pas dans une séquence?


10

J'ai cette boucle:

  for (int i = 1; i < 10; i++)

Mais à la place, j'aimerais avoir i pour les numéros 1, 2, 4, 5 et 7 et je coderai cela en dur.

Existe-t-il un moyen de le faire avec quelque chose comme un tableau?


1
créez un tableau de vos numéros requis et utilisez foreach
PaulF

2
Pourrait donner plus de détails afin que nous puissions aider à fournir des solutions pertinentes? À quelle fréquence prévoyez-vous de sauter des numéros? Combien de nombres pensez-vous sauter? Comment savez-vous quels numéros sauter? Pourquoi sautez-vous des numéros en premier lieu? Quoi et comment codez-vous cela en dur?
Corentin Pane

ce n'est pas aussi simple que je le pensais au début de trouver un doublon
Mong Zhu

Réponses:


13

Vous pouvez utiliser un tableau pour donner les chiffres que vous voulez comme ceci

int[] loop = new int[] {1,2,4,5,7};
foreach(int i in loop)
    Console.WriteLine(i);

Ou faites-le en ligne, ce qui n'est pas aussi propre lorsque la liste des valeurs s'allonge à mon avis

foreach(int i in new int[] {1,2,4,5,7})
    Console.WriteLine(i);

1
Le second est plus propre pour moi - le tableau est uniquement à portée pendant la boucle. De plus, pour le rendre vraiment "propre", vous pouvez supprimer la intdéclaration, car le compilateur le déterminera à partir du contenu.
Rufus L


4

Fondamentalement, les réponses ici sont correctes, simplement parce que vous avez demandé explicitement un forau lieu d'une foreachboucle:

int[] loop = new int[] { 1, 2, 4, 5, 7 };
for (int i = 0; i< loop.Length; i++)
{
    Console.WriteLine(loop[i]);
}

https://dotnetfiddle.net/c5yjPe


0

Si vous voulez particulièrement une boucle, allez avec ceci:

var list = new List<int>() { 1, 2, 4, 5, 7 };
        for (int i = 0; i < list.Count; i++) // Loop through List with for
        {
            Console.WriteLine(list[i]);
        }

0

Évidemment, la bonne réponse pour le cas général est d'utiliser foreachou une recherche indexée comme indiqué dans les autres réponses, mais juste pour être complet:

Vous pouvez utiliser n'importe quelle instruction dans une forexpression, y compris les conditions. Dans cet esprit, il est facile de construire un incrément conditionnel ou même un conditionnel exhaustif (machine d'état?) Pour un ensemble requis:

for (int i = 1; i <= 7; i += (i == 5 || i == 2) ? 2 : 1)
{
    Console.Write(i);
}
// Output: 12457

for (int i = 1; i > 0; i = i switch {1=>2, 2=>4, 4=>5, 5=>7, 7=>-1})
{
    Console.Write(i);
}
// Output: 12457

Ou même quelque chose de vraiment idiot comme une recherche auto-indexée:

for (int i = 1; i > 0; i = new []{0,2,4,0,5,7,0,-1}[i])
{
    Console.Write(i);
}
// Output: 12457
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.