Tässä artikkelissa opit for-in -silmukasta, sen käyttötapauksista ja muunnelmista.
For-in -silmukoita käytetään tehtäväsarjan suorittamiseen tietyn määrän kertoja. Nämä silmukat iteroivat minkä tahansa sekvenssin, kuten matriisin, alueen tai merkkijonon merkkien, välillä.
Käytämme myös for-in -silmukkaa toistuvien prosessien tekemiseen kiinteän ajan.
Miksi tarvitsemme sisäänmenosilmukkaa?
Kuvittele, että joku käski sinua kirjoittamaan ohjelman, joka tuottaa Hei, maailma! ruudulla. Ratkaisusi on:
tulosta ("Hei, maailma!")
Entä jos he muuttaisivat mielensä ja kehottivat sinua kirjoittamaan ohjelman, joka tuottaa Hei, maailma! ruudulla viisi kertaa … Ilman silmukkaa, ratkaisusi saattaa olla:
tulosta ("Hei, maailma!") tulosta ("Hei, maailma!") Tulosta ("Hei, maailma!") Tulosta ("Hei, maailma!") Tulosta ("Hei, maailma!")
Hmm. Näyttää aikaa vievältä samanlaisen koodin kirjoittaminen viisi kertaa saman työn suorittamiseksi. Jos niin, mitä tekisit, jos joku pyytää sinua kirjoittamaan ohjelman, joka tuottaa Hei, maailma! näytöllä sata tai jopa miljoonaa kertaa?
Yksi naiivi ratkaisu on kirjoittaa print
lausunto tietyn määrän kertoja. Kuulostaa hullulta, eikö? Mutta tähän on olemassa parempi ratkaisu käyttämällä for-in
silmukoita, joissa on muutama koodirivi:
for i in 1… 100 ( //outputs Hello world for 100 times in the screen print("Hello, World!") )
Älä huoli syntaksista, aiomme tutkia sitä alla.
For-in Loop -syntaksi
Voit luoda for in -silmukan Swiftissä seuraavasti:
varten ()
Yllä oleva silmukka toistaa alueen yli, ja voimme käyttää jokaista alueelta palautettua elementtiä muuttujana. Jos et tiedä alueesta, voit tarkistaa artikkelin: Swift Ranges.
Kuinka se toimii?
- Toistettava sekvenssi on a.
- A-arvo asetetaan alueen ensimmäiseksi numeroksi, ja silmukan sisällä olevat lauseet suoritetaan.
- Kun käsky on suoritettu, päivitetään sisältämään toinen arvo lausekkeessa ja käsky suoritetaan uudelleen.
- Tämä prosessi jatkuu, kunnes alueen loppu on saavutettu ja silmukka pysähtyy.
Esimerkki 1: Kuinka sisäänmenosilmukka toimii Swiftissä
for i in 1… 3 ( print("Hello world!. Value is (i)") )
Kun suoritat ohjelmaa, tulos on:
Hei maailma!. Arvo on 1 Hei maailma !. Arvo on 2 Hei maailma !. Arvo on 3
Yllä olevassa ohjelmassa iteroitava sekvenssi on alue 1-3.
I: n arvo asetetaan alueen ensimmäiseksi numeroksi (1) ja päivitetään kunkin iteraation alueen seuraavaan numeroon. Tämä prosessi jatkuu, kunnes alue (3) on saavutettu.
Sisäänrakennetun silmukan suoritusvaiheetToisto | Palautettu arvo alueelta (i) | Tuotos |
---|---|---|
1 | 1 | Hei maailma!. Arvo on 1 |
2 | 2 | Hei maailma!. Arvo on 2 |
3 | 3 | Hei maailma!. Arvo on 3 |
Alueen arvon hylkääminen for-in-silmukassa
Jos et käytä silmukan sisällä olevaa aluearvoa, voit hylätä sen _
(alaviiva) Swiftissä seuraavasti:
_: lle ()
Esimerkki 2: Alueen arvon hylkääminen tulevaa silmukkaa varten
// This example neglects value and uses half open range operator for _ in 1… <3 ( print("Hello world!") )
Kun suoritat ohjelmaa, tulos on:
Hei maailma! Hei maailma!
Yllä olevassa ohjelmassa iteroitava sekvenssi on alue 1 - 2, koska käytetään puoliavoin operaattoria (… <), joka sisältää alarajan (1) mutta ei ylärajaa (3).
_
laiminlyö arvon alueen (1) ja tulostuslauseke suoritetaan. Tulostuslauseketta kutsutaan uudelleen seuraavaa iteraatiota varten ja prosessi päättyy, koska 2 on alueen viimeinen arvo.
Toisto | Arvo palautettu alueelta | Tuotos |
---|---|---|
1 | Hylätty | Hei maailma! |
2 | Hylätty | Hei maailma! |
for-in -silmukka kiinteille aikaväleille askeleen avulla
Jos haluat silmukan, joka kasvaa jokaisella kiinteällä arvolla jokaisessa iteraatiossa, alueen sijasta, sinun on käytettävä stride-menetelmää.
Esimerkki 3: for-in -silmukka stride-menetelmällä
let interval = 2 for i in stride(from: 1, to: 10, by: interval) ( print(i) )
Kun suoritat ohjelmaa, tulos on:
1 3 5 7 9
Yllä olevassa ohjelmassa stride
funktio palauttaa numerosarjan: 1, 3, 5, 7, 9.
I: n arvoksi asetetaan sekvenssin ensimmäinen numero (1), ja suoritetaan silmukan sisällä oleva tulostuslauseke, joka antaa "1" konsolissa.
Kun käsky on suoritettu, i: n arvo päivitetään toiseen arvoon (3) ja tulostuslauseke kutsutaan uudelleen. Tämä prosessi jatkuu, kunnes sekvenssin kaikki elementit ovat käytettävissä.
Sisäänrakennetun silmukan suoritusvaiheet askeleen avullaArvo | Ehto (arvo <loppu) | i (lähtö) |
---|---|---|
1 | 1 <10 (tosi) | 1 |
1 + 2 = 3 | 3 <10 (tosi) | 3 |
1 + 2 * 2 = 5 | 5 <10 (tosi) | 5 |
1 + 3 * 2 = 7 | 7 <10 (tosi) | 7 |
1 + 4 * 2 = 9 | 9 <10 (tosi) | 9 |
1 + 5 * 2 = 11 | 11 <10 (väärä) | Pysähtyy |
Kuinka käyttää kokoelman elementtejä for-in-silmukan avulla?
Oletetaan, että sinulla on joukko merkkijonoja kuten alla. Jos et tiedä taulukosta, ajattele taulukkoa yhtenä säilönä, joka voi tallentaa useita arvoja. Katso tarkemmat selitykset kohdasta Swift Arrays.
anna ohjelmointikielet = ("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).
arvo asetetaan merkkijonon ensimmäiseksi merkiksi ja se tarkistetaan where-ehdolla. Jos ehto palaa true
, suoritetaan silmukan sisällä oleva lohko (tulostuslauseke), joka antaa "I" -konsolissa.
Kun käsky on suoritettu, arvo päivitetään merkkijonon seuraavaan merkkiin ja ehto tarkistetaan uudelleen. Jos ehto palaa false
, se ei suorita lohkoa ja arvo päivitetään seuraavaan merkkiin.
Tämä prosessi jatkuu, kunnes merkkijonon viimeinen merkki on käytettävissä.
Suodata sisäänrakennetun silmukan suoritusvaiheiden avullaToisto | arvo | arvo! = “!” | Tuotos |
---|---|---|---|
1 | Minä | totta | Minä |
2 | ♥ | totta | ♥ |
3 | S | totta | S |
4 | w | totta | w |
5 | i | totta | i |
6 | f | totta | f |
7 | t | totta | t |
8 | ! | väärä |