Bucle for-in rápido: ¿Cómo se usa y por qué?

En este artículo, aprenderá sobre el bucle for-in, sus casos de uso y variantes.

Los bucles for-in se utilizan para ejecutar un conjunto de tareas durante un cierto número de veces. Estos bucles iteran sobre cualquier secuencia, como elementos en una matriz, rango o caracteres en una cadena.

También usamos el bucle for-in para realizar algunos procesos repetitivos durante un período de tiempo fijo.

¿Por qué necesitamos un bucle for-in?

Imagina que alguien te dice que escribas un programa que genere Hello, World! en la pantalla. Tu solución será:

 print ("¡Hola, mundo!")

¿Qué pasaría si cambiaran de opinión y te dijeran que escribieras un programa que genere Hello, World! en la pantalla cinco veces … Sin el conocimiento de loop, su solución podría ser:

 print ("¡Hola, mundo!") print ("¡Hola, mundo!") print ("¡Hola, mundo!") print ("¡Hola, mundo!") print ("¡Hola, mundo!")

Hmm. Parece llevar mucho tiempo escribir un código similar cinco veces para realizar el mismo trabajo. Si es así, ¿qué haría si alguien le solicita que escriba un programa que genere Hello, World! en la pantalla cientos o incluso millones de veces?

Una solución ingenua es escribir el printenunciado una cantidad determinada de veces. Suena loco, ¿verdad? Pero hay una mejor solución para esto con el uso de for-inbucles con pocas líneas de código como:

 for i in 1… 100 ( //outputs Hello world for 100 times in the screen print("Hello, World!") ) 

No se preocupe por la sintaxis, la exploraremos a continuación.

Sintaxis de bucle for-in

Puede crear un bucle for in en Swift como:

 para en () 

El ciclo anterior itera sobre un rango y podemos acceder a cada elemento devuelto desde el rango en variable. Si no conoce el rango, puede consultar el artículo: Swift Ranges.

¿Cómo funciona?

  • La secuencia sobre la que se repite es a.
  • Se establece en el primer número del rango y se ejecutan las instrucciones dentro del ciclo.
  • Una vez que se ejecuta la instrucción, se actualiza para contener el segundo valor en y la instrucción se ejecuta nuevamente.
  • Este proceso continúa hasta que se alcanza el final del rango y el bucle se detiene.

Ejemplo 1: cómo funciona el bucle for-in en Swift

 for i in 1… 3 ( print("Hello world!. Value is (i)") ) 

Cuando ejecute el programa, la salida será:

¡Hola Mundo!. El valor es 1 ¡Hola mundo !. El valor es 2 ¡Hola mundo !. El valor es 3

En el programa anterior, la secuencia que se repite es un rango de 1 a 3.

El valor de i se establece en el primer número del rango (1) y se actualiza al siguiente número del rango en cada iteración. Este proceso continúa hasta que se alcanza el final del rango (3).

Pasos de ejecución de bucle for-in
Iteración Valor devuelto del rango (i) Salida
1 1 ¡Hola Mundo!. El valor es 1
2 2 ¡Hola Mundo!. El valor es 2
3 3 ¡Hola Mundo!. El valor es 3

Descartar el valor del rango en un bucle for-in

Si no tiene uso para el valor de rango dentro del ciclo, puede descartar usando _(guión bajo) en Swift como:

 para _ en () 

Ejemplo 2: descartar el valor del rango en el bucle for-in

 // This example neglects value and uses half open range operator for _ in 1… <3 ( print("Hello world!") ) 

Cuando ejecute el programa, la salida será:

¡Hola Mundo! ¡Hola Mundo!

En el programa anterior, la secuencia sobre la que se itera es un rango de 1 a 2 debido al uso del operador de rango medio abierto (… <) que incluye el límite inferior (1) pero no el límite superior (3).

_descuida el valor del rango (1) y se ejecuta la declaración de impresión. La declaración de impresión se vuelve a llamar para la siguiente iteración y el proceso finaliza porque 2 es el último valor del rango.

Pasos de ejecución de bucle for-in sin valores de rango
Iteración Valor devuelto del rango Salida
1 Descartado ¡Hola Mundo!
2 Descartado ¡Hola Mundo!

bucle for-in para intervalos fijos usando stride

Si desea un bucle que se incremente en un valor fijo en cada iteración, en lugar de un rango, debe usar el método stride.

Ejemplo 3: bucle for-in usando el método stride

 let interval = 2 for i in stride(from: 1, to: 10, by: interval) ( print(i) ) 

Cuando ejecute el programa, la salida será:

 1 3 5 7 9 

En el programa anterior, la stridefunción devuelve la secuencia de números: 1, 3, 5, 7, 9.

El valor de i se establece en el primer número de la secuencia (1), y se ejecuta la declaración de impresión dentro del bucle que genera "1" en la consola.

Después de que se ejecuta la instrucción, el valor de i se actualiza a otro valor (3) y se llama nuevamente a la instrucción de impresión. Este proceso continúa hasta que se accede a todos los elementos de la secuencia.

Pasos de ejecución de bucle for-in usando stride
Valor Condición (Valor <Fin) i (salida)
1 1 <10 (verdadero) 1
1 + 2 = 3 3 <10 (verdadero) 3
1 + 2 * 2 = 5 5 <10 (verdadero) 5
1 + 3 * 2 = 7 7 <10 (verdadero) 7
1 + 4 * 2 = 9 9 <10 (verdadero) 9
1 + 5 * 2 = 11 11 <10 (falso) Para

¿Cómo acceder a los elementos de una colección usando el bucle for-in?

Suponga que tiene una matriz de cadenas como se muestra a continuación. Si no conoce la matriz, piense en la matriz como un único contenedor que puede almacenar más de un valor. Para obtener una explicación más detallada, consulte Swift Arrays.

 let programmingLanguages ​​= ("Swift", "Java", "Go", "JavaScript", "Kotlin", "Python")

What if someone told you to print all the programming languages?

A way is to access those elements using index as programmingLanguages(0), programmingLanguages(1)… and so on till you get all the elements. But this is too tedious.

Here comes for-in loop to the rescue. You can iterate using for in loop as:

Example 4: Accessing elements of an array (collection) using for-in loop

 let programmingLanguages = ("Swift", "Java", "Go", "JavaScript", "Kotlin", "Python") for language in programmingLanguages ( print(language) ) 

When you run the program, the output will be:

 Swift Java Go JavaScript Kotlin Python 

In the above program, the sequence being iterated over is an array of strings.

The value of language is set to the first element of the array, and the print statement inside the loop is executed which outputs "Swift" in the console.

After the statement is executed, language is updated with the next element of the array and the print statement is called again. This process continues until the last element of array is accessed.

Example 5: Accessing elements of a string (collection) using for-in loop

Since, in Swift, strings are also collection, you can access each character in a string using for loop.

 for value in "I♥Swift!" ( print(value) ) 

When you run the program, the output will be:

 I ♥ S w i f t ! 

How to access indices of a collection using for-in loop?

If you want to access the index of the array (position of elements in an array i.e. 0, 1, 2), you need to use enumerated method as:

Example 6: Accessing indices of an array using for-in loop

 let programmingLanguages = ("Swift", "Java", "Go", "JavaScript", "Kotlin", "Python") for (index, language) in programmingLanguages.enumerated() ( print("(index):(language)") ) 

When you run the program, the output will be:

 0:Swift 1:Java 2:Go 3:JavaScript 4:Kotlin 5:Python 

Here, the enumerated method returns a tuple (Int, String) composed of the index (Int) and the value (String) for each item in the array. For example: (0, Swift), (1, Java)…

Using for-in loop, you can access these items in a tuple one by one. If you don't know about Tuple, you can simply think it as a container that can hold value of different types. For more detailed explanation, see Swift Tuples .

How to filter elements using where clause in a for-in loop?

You can also filter contents from for in loop using where clause as

 for value in "I♥Swift!" where value != "!" ( print(value) //removes exclamation sign ) 

When you run the program, the output will be:

 I ♥ S w i f t 

In the above program, the sequence being iterated over is string (collection of characters).

value se establece en el primer carácter de la cadena y se verifica con la condición where. Si la condición regresa true, se ejecuta el bloque dentro del bucle (declaración de impresión) que genera "I" en la consola.

Después de que se ejecuta la instrucción, el valor se actualiza al siguiente carácter de la cadena y nuevamente se verifica la condición. Si la condición regresa false, no ejecuta el bloque y el valor se actualiza al siguiente carácter.

Este proceso continúa hasta que se accede al último carácter de la cadena.

Filtrar usando pasos de ejecución de bucle for-in
Iteración valor valor! = "!" Salida
1 yo cierto yo
2 cierto
3 S cierto S
4 w cierto w
5 yo cierto yo
6 F cierto F
7 t cierto t
8 ! falso

Articulos interesantes...