Neste artigo, você aprenderá sobre o loop for-in, seus casos de uso e variantes.
Os loops for-in são usados para executar um conjunto de tarefas por um determinado número de vezes. Esses loops iteram sobre quaisquer sequências, como itens em uma matriz, intervalo ou caracteres em uma string.
Também usamos o loop for-in para fazer alguns processos repetitivos por um período fixo de tempo.
Por que precisamos do loop for-in?
Imagine que alguém lhe disse para escrever um programa que produza Hello, World! na tela. Sua solução será:
print ("Olá, Mundo!")
E se eles mudassem de ideia e dissessem a você para escrever um programa que gerasse Hello, World! na tela por cinco vezes … Sem o conhecimento de loop, sua solução pode ser:
print ("Hello, World!") print ("Hello, World!") print ("Hello, World!") print ("Hello, World!") print ("Hello, World!")
Hmm. Parece demorado escrever código semelhante cinco vezes para realizar o mesmo trabalho. Em caso afirmativo, o que você faria se alguém solicitar que você escreva um programa que produza Hello, World! na tela centenas ou até milhões de vezes?
Uma solução ingênua é escrever a print
declaração por determinado número de vezes. Parece loucura, certo? Mas existe uma solução melhor para isso com o uso de for-in
loops com poucas linhas de código como:
for i in 1… 100 ( //outputs Hello world for 100 times in the screen print("Hello, World!") )
Não se preocupe com a sintaxe, vamos explorá-la a seguir.
Sintaxe de Loop For-in
Você pode criar um loop for em Swift como:
para em ()
O loop acima itera em um intervalo e podemos acessar cada elemento retornado do intervalo na variável. Se você não conhece alcance, pode verificar o artigo: Swift Ranges.
Como funciona?
- A sequência que está sendo iterada é a.
- O é definido como o primeiro número do intervalo e as instruções dentro do loop são executadas.
- Depois que a instrução é executada, o é atualizado para conter o segundo valor em e a instrução é executada novamente.
- Este processo continua até que o fim do intervalo seja alcançado e o loop pare.
Exemplo 1: Como funciona o loop for-in em Swift
for i in 1… 3 ( print("Hello world!. Value is (i)") )
Quando você executa o programa, a saída será:
Olá Mundo!. O valor é 1 Olá, mundo !. O valor é 2 Olá, mundo !. O valor é 3
No programa acima, a sequência que está sendo iterada varia de 1 a 3.
O valor de i é definido para o primeiro número no intervalo (1) e atualizado para o próximo número do intervalo em cada iteração. Este processo continua até que o fim do intervalo (3) seja alcançado.
Etapas de execução do loop for-inIteração | Valor retornado do intervalo (i) | Resultado |
---|---|---|
1 | 1 | Olá Mundo!. O valor é 1 |
2 | 2 | Olá Mundo!. O valor é 2 |
3 | 3 | Olá Mundo!. O valor é 3 |
Descartando o valor do intervalo em um loop for-in
Se você não tiver uso para o valor do intervalo dentro do loop, pode descartar o uso _
(sublinhado) no Swift como:
para _ em ()
Exemplo 2: descartando o valor do intervalo no loop for-in
// This example neglects value and uses half open range operator for _ in 1… <3 ( print("Hello world!") )
Quando você executa o programa, a saída será:
Olá Mundo! Olá Mundo!
No programa acima, a sequência que está sendo iterada é um intervalo de 1 a 2 por causa do uso do operador de intervalo semi-aberto (… <) que inclui o limite inferior (1), mas não o limite superior (3).
_
negligencia o valor do intervalo (1) e a instrução de impressão é executada. A instrução print é chamada novamente para a próxima iteração e o processo termina porque 2 é o último valor no intervalo.
Iteração | Valor retornado do intervalo | Resultado |
---|---|---|
1 | Descartado | Olá Mundo! |
2 | Descartado | Olá Mundo! |
loop for-in para intervalos fixos usando passada
Se você quiser um loop que seja incrementado por algum valor fixo em cada iteração, em vez do intervalo, você terá que usar o método stride.
Exemplo 3: loop for-in usando o método de passada
let interval = 2 for i in stride(from: 1, to: 10, by: interval) ( print(i) )
Quando você executa o programa, a saída será:
1 3 5 7 9
No programa acima, a stride
função retorna a sequência de números: 1, 3, 5, 7, 9.
O valor de i é definido como o primeiro número da sequência (1) e a instrução de impressão dentro do loop é executada, gerando "1" no console.
Depois que a instrução é executada, o valor de i é atualizado para outro valor (3) e a instrução print é chamada novamente. Esse processo continua até que todos os elementos da sequência sejam acessados.
Etapas de execução de loop for-in usando strideValor | Condição (Valor <Fim) | i (saída) |
---|---|---|
1 | 1 <10 (verdadeiro) | 1 |
1 + 2 = 3 | 3 <10 (verdadeiro) | 3 |
1 + 2 * 2 = 5 | 5 <10 (verdadeiro) | 5 |
1 + 3 * 2 = 7 | 7 <10 (verdadeiro) | 7 |
1 + 4 * 2 = 9 | 9 <10 (verdadeiro) | 9 |
1 + 5 * 2 = 11 | 11 <10 (falso) | Pára |
Como acessar os elementos de uma coleção usando o loop for-in?
Suponha que você tenha uma matriz de strings como abaixo. Se você não conhece array, pense em array como um único contêiner que pode armazenar mais de um valor. Para obter uma explicação mais detalhada, 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 é definido como o primeiro caractere da string e é verificado com a condição where. Se a condição retornar true
, o bloco dentro do loop (instrução de impressão) será executado, gerando "I" no console.
Depois que a instrução é executada, o valor é atualizado para o próximo caractere da string e novamente a condição é verificada. Se a condição retornar false
, ele não executa o bloco e o valor é atualizado para o próximo caractere.
Este processo continua até que o último caractere da string seja acessado.
Filtrar usando etapas de execução de loop for-inIteração | valor | valor! = “!” | Resultado |
---|---|---|---|
1 | Eu | verdade | Eu |
2 | ♥ | verdade | ♥ |
3 | S | verdade | S |
4 | W | verdade | W |
5 | Eu | verdade | Eu |
6 | f | verdade | f |
7 | t | verdade | t |
8 | ! | falso |