English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In questo articolo, imparerai il ciclo for-in, i suoi esempi di utilizzo e le sue varianti.
Il ciclo for-in viene utilizzato per eseguire un insieme di compiti in un determinato periodo di tempo. Questi cicli esplorano qualsiasi sequenza, come gli elementi di un array, un intervallo o i caratteri di una stringa.
Usiamo anche il ciclo for-in per eseguire processi ripetitivi in un lasso di tempo fisso.
Immagina che qualcuno ti chieda di scrivere un programma che visualizzi Hello, World! sullo schermo! La tua soluzione sarà:
print("Hello, World!")
E se cambiassero idea e ti dicessero di scrivere un programma che visualizzi Hello, World! sullo schermo cinque volte? Se non hai conoscenze di cicli, la tua soluzione potrebbe essere:
print("Hello, World!") print("Hello, World!") print("Hello, World!") print("Hello, World!") print("Hello, World!")
Beh, completare cinque volte lo stesso codice per fare lo stesso lavoro sembra molto耗时. Se fosse così, se qualcuno ti chiedesse di scrivere un programma che visualizzi Hello, World! sullo schermo centinaia o persino milioni di volte, cosa faresti?
Una soluzione infantile potrebbe essere di scrivere una serie di print per la次数. Sembra folle, vero? Ma, utilizzando alcune righe di codice del ciclo for-in, si può trovare una soluzione migliore:
for i in 1...100 { //Esce Hello World 100 volte sullo schermo print("Hello, World!") }
Non preoccuparti della sintassi, ne parleremo più avanti.
Puoi creare un ciclo for-in in Swift come segue:
for <value> in <range> { <some work here> }
Il ciclo sopra esplora una gamma, possiamo accedere a ogni elemento restituito dalla gamma nel variabile <value>. Se non sei a conoscenza delle gamme, puoi leggere l'articolo seguente:Swift Ranges.
La sequenza iterata è una <range>.
Imposta <value> al primo numero della gamma e esegui la frase nel ciclo < Alcuni lavori qui >
Dopo l'esecuzione della frase, <value> viene aggiornato per includere il secondo valore della <range> e la frase <Alcuni lavori qui> Viene eseguito di nuovo.
Questo processo continua fino a raggiungere la fine dell'intervallo e interrompere il ciclo.
for i in 1...3 { print("Hello world! Valore è \(i)") }
Quando si esegue il programma, l'output è:
Hello world! Valore è 1 Hello world! Valore è 2 Hello world! Valore è 3
Nel programma sopra, l'intervallo di sequenza da iterare è tra 1 e 3.
Il valore di i viene impostato sul primo numero della gamma (1) e aggiornato a ogni iterazione con il numero successivo della gamma. Questo processo continua fino alla fine della gamma (3).
Iterazione | Valore restituito dalla gamma (i) | Output |
---|---|---|
1 | 1 | Hello world! Valore è 1 |
2 | 2 | Hello world! Valore è 2 |
3 | 3 | Hello world! Valore è 3 |
Se non si utilizza il valore di intervallo all'interno del ciclo, è possibile utilizzare (underscore _) per eliminarlo in Swift, come mostrato di seguito:
for _ in <range> { <some work here> }
//Questo esempio ignora i valori e utilizza l'operatore di intervallo aperto a sinistra for _ in 1..<3 { print("Hello world!") }
Quando si esegue il programma, l'output è:
Hello world! Hello world!
Nel programma sopra, a causa dell'uso diOperatore di intervallo aperto a sinistra(.. <),per cui l'intervallo di sequenza da percorrere è tra 1 e 2, inclusa la soglia inferiore (1) ma escludendo la soglia superiore (3).
Il sottolineato _ ignora il valore nell'intervallo (1) e esegue l'istruzione print. Viene nuovamente chiamata l'istruzione print per l'iterazione successiva, e il processo termina perché 2 è l'ultimo valore nell'intervallo.
Iterazione | Valori restituiti da un intervallo | Output |
---|---|---|
1 | Scarta | Hello world! |
2 | Scarta | Hello world! |
Se si desidera che il ciclo aumenti di un valore fisso (invece di un intervallo) in ogni iterazione, è necessario utilizzare il metodo stride.
let interval = 2 for i in stride(from: 1, to: 10, by: interval) { print(i) }
Quando si esegue il programma, l'output è:
1 3 5 7 9
Nel programma sopra, la funzione stride restituisce la sequenza numerica: 1, 3, 5, 7, 9.
Il valore di i viene impostato sul primo numero della sequenza (1) e viene eseguita l'istruzione print all'interno del ciclo, che nel terminale output "1".
Dopo aver eseguito questa istruzione, viene aggiornato il valore di i con un altro valore (3) e viene nuovamente chiamata l'istruzione print. Questo processo continua fino a quando vengono visitati tutti gli elementi della sequenza.
Valore | Condizione (Valore < Fine) | i (output) |
---|---|---|
1 | 1 < 10 (vero) | 1 |
1 + 2 = 3 | 3 < 10 (vero) | 3 |
1 + 2 * 2 = 5 | 5 < 10 (vero) | 5 |
1 + 3 * 2 = 7 | 7 < 10 (vero) | 7 |
1 + 4 * 2 = 9 | 9 < 10 (vero) | 9 |
1 + 5 * 2 = 11 | 11 < 10 (falso) | Stops |
Supponiamo di avere un array di stringhe, come nel seguente esempio. Se non conosci gli array, puoi considerarli come un singolo contenitore che può memorizzare più valori. Per ulteriori dettagli, vedereArray Swift.
let programmingLanguages = ["Swift", "Java", "Go", "JavaScript", "Kotlin", "Python"]
Cosa fare se qualcuno ti dice di stampare tutti i linguaggi di programmazione?
Un metodo è utilizzare gli indici di valore programmingLanguages[0], programmingLanguages[1]... per accedere a questi elementi, ecc., fino a quando si ottengono tutti gli elementi. Ma è troppo complicato.
Quindi il ciclo diventa utile. Puoi utilizzare il ciclo for-in per l'iterazione:
let programmingLanguages = ["Swift", "Java", "Go", "JavaScript", "Kotlin", "Python"] for language in programmingLanguages { print(language) }
Quando si esegue il programma, l'output è:
Swift Java Go JavaScript Kotlin Python
Nel programma sopra, la sequenza da iterare è un array di stringhe.
Il valore di language viene impostato sul primo elemento dell'array e viene eseguita la frase print all'interno del ciclo, che visualizza "Swift" nel terminale.
Dopo l'esecuzione della frase, la variabile language viene aggiornata con l'elemento successivo dell'array e viene nuovamente chiamata la frase print. Questo processo continua fino a quando si raggiunge l'ultimo elemento dell'array.
Poiché in SwiftStringaAnche le stringhe sono raccolte, quindi puoi accedere a ogni carattere della stringa utilizzando un ciclo for.
for value in "I♥Swift!" { print(value) }
Quando si esegue il programma, l'output è:
I ♥ S w i f t !
Se vuoi accedere agli indici dell'array (la posizione degli elementi nell'array, ossia 0, 1, 2), devi usare il metodo enumerated:
let programmingLanguages = ["Swift", "Java", "Go", "JavaScript", "Kotlin", "Python"] for (index, language) in programmingLanguages.enumerated() { print("\(index):\(language)") }
Quando si esegue il programma, l'output è:
0:Swift 1:Java 2:Go 3:JavaScript 4:Kotlin 5:Python
In questo caso, il metodo Enumerazione restituisce un tuple (Int, String) per ogni elemento dell'array. Ad esempio: (0,Swift), (1,Java)
Utilizzando il ciclo for-in, puoi accedere uno per uno agli elementi di questi tuple. Se non conosci il Tuple (insieme), puoi vederlo semplicemente come un contenitore che può accogliere valori di diversi tipi.
Puoi anche usareWHEREla clausola WHERE filtra il contenuto del ciclo for
per value in "I♥Swift!" where value != "!" { print(value) // Rimuovi l'interroghetto }
Quando si esegue il programma, l'output è:
I ♥ S w i f t
Nel programma sopra, la sequenza da iterare è la stringa (insieme di caratteri).
value viene impostato sul primo carattere della stringa e controllato con la condizione where. Se la condizione restituisce true, viene eseguito il blocco all'interno del ciclo (istruzione di print), che esce “ I” nel console.
Dopo l'esecuzione della statement, value viene aggiornato al carattere successivo della stringa e controllato nuovamente la condizione. Se la condizione restituisce false, non viene eseguito il blocco e value viene aggiornato al carattere successivo.
Questo processo continua fino a raggiungere l'ultimo carattere della stringa.
Iterazione | value | value != “!” | Output |
---|---|---|---|
1 | I | true | I |
2 | ♥ | true | ♥ |
3 | S | true | S |
4 | w | true | w |
5 | i | true | i |
6 | f | true | f |
7 | t | true | t |
8 | ! | false |