Existe uma maneira de codificar um loop for para que ele não seja incrementado através de uma sequência?

10

Eu tenho esse loop:

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

Mas, em vez disso, gostaria de ter i apenas para os números 1,2,4,5 e 7 e codificarei isso.

Existe uma maneira de fazer isso com algo como uma matriz?

Alan2
fonte
11
criar uma matriz de seus números necessários e uso foreach
PaulF
2
Poderia fornecer mais detalhes para que possamos ajudar a fornecer soluções relevantes? Com que frequência você planeja pular números? Quantos números você espera pular? Como você sabe quais números pular? Por que você está pulando números em primeiro lugar? O que e como você está codificando isso?
Corentin Pane
não é assim tão fácil como eu pensava no início para encontrar uma duplicata
Mong Zhu

Respostas:

13

Você pode usar uma matriz para fornecer os números que deseja assim

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

Ou fazê-lo em linha que não é tão limpo quando a lista de valores cresce na minha opinião

foreach(int i in new int[] {1,2,4,5,7})
    Console.WriteLine(i);
Joost K
fonte
11
O segundo é mais limpo para mim - a matriz está apenas no escopo durante o loop. Além disso, para torná-lo realmente "limpo", você pode remover a intdeclaração, pois o compilador determinará isso no conteúdo.
Rufus L
7
foreach (int i in new int[] { 1, 2, 4, 5, 7 })
{

}
Johnathan Barclay
fonte
4

Basicamente, as respostas aqui estão corretas, apenas porque você pediu explicitamente forum foreachloop em vez de um loop:

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
fonte
0

Se você deseja particularmente o loop, vá com isso:

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
fonte
0

Obviamente, a resposta certa para o caso geral é usar foreachou uma pesquisa indexada, como mostrado nas outras respostas, mas apenas por uma questão de integridade:

Você pode usar qualquer instrução dentro de uma forexpressão, incluindo condicionais. Com isso em mente, é fácil criar um incremento condicional ou mesmo um condicional exaustivo (máquina de estado?) Para um conjunto necessário:

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 mesmo algo realmente bobo, como uma pesquisa de auto-indexação:

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