¿Hay alguna manera de codificar un bucle for para que no se incremente a través de una secuencia?

10

Tengo este bucle:

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

Pero, en cambio, me gustaría tener i solo para los números 1,2,4,5 y 7 y codificaré esto.

¿Hay alguna manera de hacer esto con algo así como una matriz?

Alan2
fuente
1
cree una matriz de sus números requeridos y use foreach
PaulF
2
¿Podría dar más detalles para que podamos ayudar a proporcionar soluciones relevantes? ¿Con qué frecuencia planea omitir números? ¿Cuántos números esperas saltar? ¿Cómo sabes qué números omitir? ¿Por qué estás saltando números en primer lugar? ¿Qué y cómo estás codificando esto?
Panel Corentin el
no es tan fácil como pensé al principio encontrar un duplicado
Mong Zhu

Respuestas:

13

Podrías usar una matriz para dar los números que quieres así

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

O hágalo en línea, lo que no es tan limpio cuando la lista de valores crece en mi opinión

foreach(int i in new int[] {1,2,4,5,7})
    Console.WriteLine(i);
Joost K
fuente
1
El segundo es más limpio para mí: la matriz solo tiene alcance durante el ciclo. Además, para que sea realmente "limpio", puede eliminar la intdeclaración, ya que el compilador lo determinará a partir de los contenidos.
Rufus L
7
foreach (int i in new int[] { 1, 2, 4, 5, 7 })
{

}
Johnathan Barclay
fuente
4

Básicamente, las respuestas aquí son correctas, solo porque solicitó explícitamente forun foreachbucle en lugar de un bucle:

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

Si desea particularmente para el bucle, vaya con esto:

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

Obviamente, la respuesta correcta para el caso general es usar foreacho una búsqueda indexada como se muestra en las otras respuestas, pero solo por completo:

Puede usar cualquier declaración dentro de una forexpresión, incluidos los condicionales. Con eso en mente, es fácil construir un incremento condicional o incluso un condicional exhaustivo (¿máquina de estado?) Para un conjunto requerido:

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 incluso algo realmente tonto como una búsqueda de auto indexación:

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