Gibt es eine Möglichkeit, eine for-Schleife so zu codieren, dass sie nicht durch eine Sequenz inkrementiert wird?

10

Ich habe diese Schleife:

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

Aber stattdessen möchte ich i nur für die Nummern 1,2,4,5 und 7 haben und ich werde dies fest codieren.

Gibt es eine Möglichkeit, dies mit so etwas wie einem Array zu tun?

Alan2
quelle
1
Erstellen Sie ein Array Ihrer erforderlichen Nummern und verwenden Sie foreach
PaulF
2
Könnten Sie weitere Details angeben, damit wir Ihnen bei der Bereitstellung relevanter Lösungen helfen können? Wie oft planen Sie, Zahlen zu überspringen? Wie viele Zahlen werden Sie voraussichtlich überspringen? Woher wissen Sie, welche Nummern zu überspringen sind? Warum überspringen Sie überhaupt Zahlen? Was und wie codierst du das fest?
Corentin Pane
Es ist nicht so einfach, wie ich am Anfang dachte, ein Duplikat zu finden
Mong Zhu

Antworten:

13

Sie können ein Array verwenden, um die gewünschten Zahlen wie folgt anzugeben

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

Oder machen Sie es inline, was meiner Meinung nach nicht so sauber ist, wenn die Liste der Werte wächst

foreach(int i in new int[] {1,2,4,5,7})
    Console.WriteLine(i);
Joost K.
quelle
1
Der zweite ist für mich sauberer - das Array ist nur während der Schleife im Gültigkeitsbereich. Um es wirklich "sauber" zu machen, können Sie die intDeklaration auch entfernen , da der Compiler dies aus dem Inhalt bestimmt.
Rufus L
7
foreach (int i in new int[] { 1, 2, 4, 5, 7 })
{

}
Johnathan Barclay
quelle
4

Grundsätzlich sind die Antworten hier richtig, nur weil Sie explizit nach a gefragt haben for statt einer foreachSchleife :

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

Fubo
quelle
0

Wenn Sie speziell für Schleife wollen, dann gehen Sie mit diesem:

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]);
        }
Ajeet Malviya
quelle
0

Offensichtlich die richtige Antwort für den allgemeinen Fall zu verwendenforeach oder eine indizierte Suche, wie in den anderen Antworten gezeigt, aber nur der Vollständigkeit halber:

Sie können jede Anweisung innerhalb eines forAusdrucks verwenden, einschließlich Bedingungen. In diesem Sinne ist es einfach, ein bedingtes Inkrement oder sogar ein erschöpfendes zu erstellen Bedingung (Zustandsmaschine?) Für einen erforderlichen Satz :

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

Oder sogar etwas wirklich Dummes wie eine selbstindizierende Suche:

for (int i = 1; i > 0; i = new []{0,2,4,0,5,7,0,-1}[i])
{
    Console.Write(i);
}
// Output: 12457
Andrew Hanlon
quelle