Czy istnieje sposób na zakodowanie pętli for, aby nie zwiększała sekwencji?

10

Mam tę pętlę:

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

Ale zamiast tego chciałbym mieć i tylko dla liczb 1, 2, 4, 5, 5 i 7 i na stałe to koduję.

Czy mogę to zrobić za pomocą czegoś takiego jak tablica?

Alan2
źródło
1
stwórz tablicę swoich wymaganych numerów i użyj foreach
PaulF
2
Czy możemy podać więcej szczegółów, abyśmy mogli pomóc w dostarczeniu odpowiednich rozwiązań? Jak często planujesz pomijać liczby? Ile liczb chcesz pominąć? Skąd wiesz, które liczby pominąć? Dlaczego w ogóle pomijasz liczby? Co i jak to kodujesz?
Corentin Pane,
znalezienie duplikatu nie jest tak łatwe, jak myślałem na początku
Mong Zhu,

Odpowiedzi:

13

Możesz użyć tablicy, aby podać liczby, które chcesz w ten sposób

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

Lub zrób to w linii, która nie jest tak czysta, gdy lista wartości rośnie moim zdaniem

foreach(int i in new int[] {1,2,4,5,7})
    Console.WriteLine(i);
Joost K.
źródło
1
Drugi jest dla mnie czystszy - tablica ma zasięg tylko podczas pętli. Ponadto, aby było naprawdę „czyste”, możesz usunąć intdeklarację, ponieważ kompilator określi to na podstawie zawartości.
Rufus L
7
foreach (int i in new int[] { 1, 2, 4, 5, 7 })
{

}
Johnathan Barclay
źródło
4

Zasadniczo odpowiedzi tutaj są poprawne, tylko dlatego, że poprosiłeś wprost o pętlę forzamiast foreach:

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
źródło
0

Jeśli chcesz szczególnie dla pętli, skorzystaj z tego:

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
źródło
0

Oczywiście prawidłową odpowiedzią w ogólnym przypadku jest użycie foreachlub indeksowane wyszukiwanie, jak pokazano w innych odpowiedziach, ale tylko ze względu na kompletność:

Możesz użyć dowolnego wyrażenia w forwyrażeniu, w tym warunkowego. Mając to na uwadze, łatwo jest zbudować przyrost warunkowy, a nawet wyczerpujący warunek (maszyna stanu?) Dla wymaganego zestawu:

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

Lub nawet coś naprawdę głupiego, jak wyszukiwanie samoindeksujące:

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