C'è un modo per codificare un ciclo for in modo che non aumenti attraverso una sequenza?


10

Ho questo ciclo:

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

Ma invece vorrei avere solo i numeri 1,2,4,5 e 7 e lo codificherò.

C'è un modo per farlo con qualcosa come un array?


1
crea una matrice dei numeri richiesti e usa foreach
PaulF

2
Potresti fornire maggiori dettagli in modo da poter aiutare a fornire soluzioni pertinenti? Quanto spesso pensi di saltare i numeri? Quanti numeri ti aspetti di saltare? Come fai a sapere quali numeri saltare? Perché in primo luogo stai saltando i numeri? Cosa e come lo stai codificando?
Corentin Pane,

non è così facile come pensavo all'inizio di trovare un duplicato
Mong Zhu,

Risposte:


13

È possibile utilizzare un array per fornire i numeri desiderati in questo modo

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

O farlo in linea che non è così pulito quando l'elenco dei valori cresce secondo me

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

1
Il secondo è più pulito per me - l'array è solo nell'ambito durante il loop. Inoltre, per renderlo davvero "pulito", è possibile rimuovere la intdichiarazione, poiché il compilatore lo determinerà dal contenuto.
Rufus L


4

Fondamentalmente le risposte qui sono corrette, solo perché hai chiesto esplicitamente un foranziché un foreachciclo:

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

Se vuoi particolarmente per il loop, vai con questo:

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

Ovviamente la risposta giusta per il caso generale è usare foreacho una ricerca indicizzata come mostrato nelle altre risposte, ma solo per completezza:

È possibile utilizzare qualsiasi istruzione all'interno di forun'espressione, inclusi i condizionali. Con questo in mente, è facile costruire un incremento condizionale o anche un condizionale esaustivo (macchina a stati?) Per un set richiesto:

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

O anche qualcosa di veramente sciocco come una ricerca di auto-indicizzazione:

for (int i = 1; i > 0; i = new []{0,2,4,0,5,7,0,-1}[i])
{
    Console.Write(i);
}
// Output: 12457
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.