„Swift for-in“ kilpa: kaip ją naudoti ir kodėl?

Šiame straipsnyje sužinosite apie „for-in“ kilpą, jos naudojimo atvejus ir variantus.

„For-in“ kilpos naudojamos užduočių rinkiniui paleisti tam tikrą skaičių kartų. Šios kilpos kartojasi pagal visas sekas, pvz., Masyvo elementus, diapazoną ar eilutės simbolius.

Mes taip pat naudojame įjungimo ciklą tam tikriems pasikartojantiems procesams atlikti fiksuotą laiką.

Kodėl mums reikia įvesties ciklo?

Įsivaizduokite, kad kažkas liepė jums parašyti programą, išvesdamas sveiką pasaulį! ekrane. Jūsų sprendimas bus:

 spausdinti („Labas, pasauli!“)

Ką daryti, jei jie persigalvojo ir liepė parašyti programą, kuri išduoda „Sveikas, pasauli!“. penkis kartus ekrane … Be ciklo žinios, jūsų sprendimas gali būti:

 spausdinti („Labas, pasauli!“) spausdinti („Sveikas, pasauli!“) spausdinti („Sveikas, pasauli!“) spausdinti („Sveikas, pasauli!“) spausdinti („Sveikas, pasauli!“)

Hmm. Panašu, kad užima daug laiko penkis kartus parašyti panašų kodą tam pačiam darbui atlikti. Jei taip, ką darytumėte, jei kas nors paprašytų jūsų parašyti programą, kurios rezultatai būtų sveiki, pasauli! ekrane šimtus ar net milijoną kartų?

Vienas naivus sprendimas yra parašyti printpareiškimą tam tikrą skaičių kartų. Skamba beprotiškai, tiesa? Tačiau tam yra geresnis sprendimas naudojant for-inkilpas su keliomis kodo eilutėmis:

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

Nesijaudinkite dėl sintaksės, mes ją nagrinėsime toliau.

„For-in Loop“ sintaksė

„Swift“ galite sukurti „for in loop“ kaip:

 skirtas () 

Pirmiau nurodyta kilpa kartojasi per diapazoną ir mes galime prieiti prie kiekvieno elemento, grąžinto iš diapazono kintamuoju. Jei nežinote apie diapazoną, galite peržiūrėti straipsnį: „Greiti diapazonai“.

Kaip tai veikia?

  • Pasikartojanti seka yra a.
  • A yra nustatytas kaip pirmasis skaičius diapazone, o sakiniai ciklo viduje vykdomi.
  • Vykdžius teiginį, atnaujinama įtraukiant antrąją reikšmę ir sakinys vėl vykdomas.
  • Šis procesas tęsiasi tol, kol pasiekiamas diapazono galas ir kilpa sustoja.

1 pavyzdys: kaip „for-in“ ciklas veikia „Swift“

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

Kai paleisite programą, išvestis bus:

Labas pasauli!. Vertė yra 1 Hello world !. Vertė yra 2 Hello world !. Vertė yra 3

Pirmiau pateiktoje programoje kartojama seka yra nuo 1 iki 3.

I reikšmė nustatoma į pirmąjį diapazono skaičių (1) ir atnaujinama iki kito diapazono skaičiaus kiekvienoje iteracijoje. Šis procesas tęsiasi tol, kol pasiekiamas diapazono (3) galas.

„For-in“ kilpos vykdymo veiksmai
Kartojimas Vertė, grąžinta iš diapazono (i) Rezultatas
1 1 Labas pasauli!. Vertė yra 1
2 2 Labas pasauli!. Vertė yra 2
3 3 Labas pasauli!. Vertė yra 3

Atmesti diapazono vertę įjungimo cikle

Jei ciklo viduje nenaudojate diapazono vertės, galite išmesti naudodami _(pabraukite) „Swift“ kaip:

 už _ į () 

2 pavyzdys: Atmetimo diapazono vertės atmetimas įvesties cikle

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

Kai paleisite programą, išvestis bus:

Labas pasauli! Labas pasauli!

Pirmiau pateiktoje programoje iteruojama seka yra nuo 1 iki 2, nes naudojamas pusiau atviro diapazono operatorius (… <), kuris apima apatinę ribą (1), bet ne viršutinę ribą (3).

_nepaiso vertės iš diapazono (1) ir vykdomas spausdinimo sakinys. Spausdinimo sakinys vėl iškviečiamas kitam kartojimui ir procesas baigiasi, nes 2 yra paskutinė diapazono reikšmė.

Įvesties ciklo vykdymo veiksmai be diapazono verčių
Kartojimas Vertė grąžinta iš diapazono Rezultatas
1 Atmesta Labas pasauli!
2 Atmesta Labas pasauli!

„for-in“ kilpa fiksuotiems intervalams naudojant žingsnį

Jei norite, kad kilpa padidėtų fiksuota verte kiekvienoje iteracijoje, o ne diapazone, turite naudoti žingsnio metodą.

3 pavyzdys: „for-in“ ciklas naudojant žingsnio metodą

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

Kai paleisite programą, išvestis bus:

 1 3 5 7 9 

Pirmiau pateiktoje programoje stridefunkcija grąžina skaičių seką: 1, 3, 5, 7, 9.

I reikšmė nustatoma į pirmąjį sekos skaičių (1), ir vykdomas ciklo viduje esantis spausdinimo sakinys, kuris konsole pateikia „1“.

Vykdžius teiginį, i reikšmė atnaujinama į kitą reikšmę (3) ir vėl iškviečiama atspausdinta ataskaita. Šis procesas tęsiasi tol, kol pasiekiami visi sekos elementai.

„For-in“ ciklo vykdymo žingsniai naudojant žingsnį
Vertė Sąlyga (vertė <pabaiga) i (išvestis)
1 1 <10 (tiesa) 1
1 + 2 = 3 3 <10 (tiesa) 3
1 + 2 * 2 = 5 5 <10 (tiesa) 5
1 + 3 * 2 = 7 7 <10 (tiesa) 7
1 + 4 * 2 = 9 9 <10 (tiesa) 9
1 + 5 * 2 = 11 11 <10 (klaidinga) Sustoja

Kaip pasiekti kolekcijos elementus naudojant „for-in“ kilpą?

Tarkime, kad turite eilių masyvą, kaip nurodyta toliau. Jei nežinote apie masyvą, galvokite apie masyvą kaip apie vieną sudėtinį rodinį, kuriame gali būti saugomos daugiau nei vienos reikšmės. Išsamesnį paaiškinimą ieškokite „Swift Arrays“.

 tegul programavimasLanguages ​​= ("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).

reikšmė nustatoma pagal pirmąjį eilutės simbolį ir patikrinama pagal sąlygą „where“. Jei sąlyga grąžinama true, vykdomas ciklo viduje esantis blokas (spausdinimo sakinys), kuris konsolėje pateikia „I“.

Vykdžius sakinį, reikšmė atnaujinama į kitą eilutės simbolį ir vėl patikrinama sąlyga. Jei sąlyga grįžta false, ji nevykdo bloko ir vertė atnaujinama į kitą simbolį.

Šis procesas tęsiasi tol, kol bus pasiektas paskutinis eilutės simbolis.

Filtruokite naudodami įvesties ciklo vykdymo veiksmus
Kartojimas vertė vertė! = „!“ Rezultatas
1 tiesa
2 tiesa
3 S tiesa S
4 w tiesa w
5 i tiesa i
6 f tiesa f
7 t tiesa t
8 ! melagingas

Įdomios straipsniai...