Σε αυτό το άρθρο, θα μάθετε για το loop in-in, τις περιπτώσεις χρήσης και τις παραλλαγές του.
Οι βρόχοι εισόδου χρησιμοποιούνται για την εκτέλεση ενός συνόλου εργασιών για ορισμένες φορές. Αυτοί οι βρόχοι επαναλαμβάνουν οποιεσδήποτε ακολουθίες, όπως στοιχεία σε πίνακα, εύρος ή χαρακτήρες σε μια συμβολοσειρά.
Χρησιμοποιούμε επίσης βρόχο για να κάνουμε μερικές επαναλαμβανόμενες διαδικασίες για ένα σταθερό χρονικό διάστημα.
Γιατί χρειαζόμαστε βρόχο εισόδου;
Φανταστείτε ότι σας είπε κάποιος να γράψετε ένα πρόγραμμα που θα βγάζει το Hello, World! στην οθόνη. Η λύση σας θα είναι:
εκτύπωση ("Γεια, Κόσμος!")
Τι θα συνέβαινε αν άλλαξαν γνώμη και σας είπαν να γράψετε ένα πρόγραμμα που βγάζει το Hello, World! στην οθόνη για πέντε φορές… Χωρίς τη γνώση του βρόχου, η λύση σας μπορεί να είναι:
print ("Hello, World!") print ("Hello, World!") print ("Hello, World!") print ("Hello, World!") εκτύπωση ("Γεια, Κόσμος!")
Χμμ. Φαίνεται χρονοβόρο για να γράψετε παρόμοιο κώδικα για πέντε φορές για να ολοκληρώσετε την ίδια εργασία. Εάν ναι, τι θα κάνατε αν κάποιος σας ζητήσει να γράψετε ένα πρόγραμμα που θα παράγει Γεια, Κόσμος! στην οθόνη για εκατό ή και εκατομμύρια εκατομμύρια φορές;
Μια αφελής λύση είναι να γράψετε τη print
δήλωση για συγκεκριμένες φορές. Ακούγεται τρελό, έτσι; Αλλά υπάρχει μια καλύτερη λύση για αυτό με τη χρήση for-in
βρόχων με λίγες γραμμές κώδικα όπως:
for i in 1… 100 ( //outputs Hello world for 100 times in the screen print("Hello, World!") )
Μην ανησυχείτε για τη σύνταξη, θα την εξερευνήσουμε παρακάτω.
Σύνταξη For-in Loop
Μπορείτε να δημιουργήσετε ένα για σε βρόχο στο Swift ως:
για μεσα ( )
Ο παραπάνω βρόχος επαναλαμβάνεται σε ένα εύρος και μπορούμε να έχουμε πρόσβαση σε κάθε στοιχείο που επιστρέφεται από το εύρος στη μεταβλητή. Εάν δεν γνωρίζετε για το εύρος, μπορείτε να δείτε το άρθρο: Swift Ranges.
Πως δουλεύει?
- Η ακολουθία που επαναλαμβάνεται είναι α.
- Το έχει οριστεί στον πρώτο αριθμό στο εύρος και εκτελούνται οι δηλώσεις εντός του βρόχου.
- Μετά την εκτέλεση της δήλωσης, η ενημέρωση ενημερώνεται για να περιέχει τη δεύτερη τιμή και η δήλωση εκτελείται ξανά.
- Αυτή η διαδικασία συνεχίζεται έως ότου επιτευχθεί το τέλος του εύρους και ο βρόχος σταματά.
Παράδειγμα 1: Πώς λειτουργεί ο βρόχος εισόδου στο Swift
for i in 1… 3 ( print("Hello world!. Value is (i)") )
Όταν εκτελείτε το πρόγραμμα, η έξοδος θα είναι:
Γειά σου Κόσμε!. Η τιμή είναι 1 Γεια σας κόσμος !. Η τιμή είναι 2 Γεια σου κόσμος !. Η τιμή είναι 3
Στο παραπάνω πρόγραμμα, η ακολουθία που επαναλαμβάνεται κυμαίνεται από 1 έως 3.
Η τιμή του i ορίζεται στον πρώτο αριθμό στο εύρος (1) και ενημερώνεται στον επόμενο αριθμό του εύρους σε κάθε επανάληψη. Αυτή η διαδικασία συνεχίζεται έως ότου επιτευχθεί το τέλος του εύρους (3).
Βήματα εκτέλεσης βρόχου εισόδουΕπανάληψη | Η τιμή επέστρεψε από το εύρος (i) | Παραγωγή |
---|---|---|
1 | 1 | Γειά σου Κόσμε!. Η τιμή είναι 1 |
2 | 2 | Γειά σου Κόσμε!. Η τιμή είναι 2 |
3 | 3 | Γειά σου Κόσμε!. Η τιμή είναι 3 |
Απόρριψη της τιμής εύρους σε βρόχο εισόδου
Εάν δεν έχετε καμία χρήση για την τιμή εύρους εντός του βρόχου, μπορείτε να απορρίψετε χρησιμοποιώντας _
(υπογράμμιση) στο Swift ως:
για μεσα ( )
Παράδειγμα 2: Απόρριψη τιμής εύρους στο βρόχο εισόδου
// This example neglects value and uses half open range operator for _ in 1… <3 ( print("Hello world!") )
Όταν εκτελείτε το πρόγραμμα, η έξοδος θα είναι:
Γειά σου Κόσμε! Γειά σου Κόσμε!
Στο παραπάνω πρόγραμμα, η ακολουθία που επαναλαμβάνεται κυμαίνεται από 1 έως 2 λόγω της χρήσης του μισού ανοιχτού εύρους χειριστή (… <) που περιλαμβάνει το κάτω όριο (1) αλλά όχι το άνω όριο (3).
_
παραμελεί την τιμή από το εύρος (1) και εκτελείται η δήλωση εκτύπωσης. Η δήλωση εκτύπωσης καλείται ξανά για την επόμενη επανάληψη και η διαδικασία τελειώνει επειδή το 2 είναι η τελευταία τιμή στο εύρος.
Επανάληψη | Η τιμή επιστράφηκε από το εύρος | Παραγωγή |
---|---|---|
1 | Απορρίφθηκε | Γειά σου Κόσμε! |
2 | Απορρίφθηκε | Γειά σου Κόσμε! |
for-in loop για σταθερά διαστήματα χρησιμοποιώντας βήμα
Εάν θέλετε έναν βρόχο που αυξάνεται με κάποια σταθερή τιμή σε κάθε επανάληψη, αντί για εύρος, πρέπει να χρησιμοποιήσετε τη μέθοδο stride.
Παράδειγμα 3: βρόχος εισόδου με χρήση μεθόδου βηματισμού
let interval = 2 for i in stride(from: 1, to: 10, by: interval) ( print(i) )
Όταν εκτελείτε το πρόγραμμα, η έξοδος θα είναι:
1 3 5 7 9
Στο παραπάνω πρόγραμμα, η stride
συνάρτηση επιστρέφει την ακολουθία των αριθμών: 1, 3, 5, 7, 9.
Η τιμή του i ορίζεται στον πρώτο αριθμό της ακολουθίας (1) και εκτελείται η δήλωση εκτύπωσης μέσα στον βρόχο που εξάγει το "1" στην κονσόλα.
Μετά την εκτέλεση της δήλωσης, η τιμή του i ενημερώνεται σε άλλη τιμή (3) και η εκτύπωση εκτύπωσης καλείται ξανά. Αυτή η διαδικασία συνεχίζεται έως ότου γίνει πρόσβαση σε όλα τα στοιχεία της ακολουθίας.
Βήματα εκτέλεσης βρόχου για χρήση με βήμααξία | Κατάσταση (Τιμή <Τέλος) | i (Έξοδος) |
---|---|---|
1 | 1 <10 (αληθινό) | 1 |
1 + 2 = 3 | 3 <10 (αληθινό) | 3 |
1 + 2 * 2 = 5 | 5 <10 (αληθινό) | 5 |
1 + 3 * 2 = 7 | 7 <10 (αληθινό) | 7 |
1 + 4 * 2 = 9 | 9 <10 (αληθινό) | 9 |
1 + 5 * 2 = 11 | 11 <10 (ψευδές) | Σταματά |
Πώς να αποκτήσετε πρόσβαση σε στοιχεία μιας συλλογής χρησιμοποιώντας βρόχο εισόδου;
Ας υποθέσουμε ότι έχετε μια σειρά από χορδές όπως παρακάτω. Εάν δεν γνωρίζετε για τον πίνακα, σκεφτείτε τον πίνακα ως ένα μόνο κοντέινερ που μπορεί να αποθηκεύσει περισσότερες από μία τιμές. Για πιο λεπτομερή εξήγηση, δείτε Swift Arrays.
ας προγραμματίσουμεLanguages = ("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).
Η τιμή ορίζεται στον πρώτο χαρακτήρα της συμβολοσειράς και ελέγχεται με τη συνθήκη όπου. Εάν η συνθήκη επιστρέψει true
, εκτελείται το μπλοκ εντός του βρόχου (ένδειξη εκτύπωσης) που εξάγει το "I" στην κονσόλα.
Μετά την εκτέλεση της δήλωσης, η τιμή ενημερώνεται στον επόμενο χαρακτήρα της συμβολοσειράς και ελέγχεται ξανά η συνθήκη. Εάν η συνθήκη επιστρέψει false
, δεν εκτελεί το μπλοκ και η τιμή ενημερώνεται στον επόμενο χαρακτήρα.
Αυτή η διαδικασία συνεχίζεται μέχρι την πρόσβαση στον τελευταίο χαρακτήρα της συμβολοσειράς.
Φιλτράρετε χρησιμοποιώντας βήματα εκτέλεσης βρόχου για είσοδοΕπανάληψη | αξία | τιμή! = "!" | Παραγωγή |
---|---|---|---|
1 | Εγώ | αληθής | Εγώ |
2 | ♥ | αληθής | ♥ |
3 | μικρό | αληθής | μικρό |
4 | β | αληθής | β |
5 | Εγώ | αληθής | Εγώ |
6 | φά | αληθής | φά |
7 | τ | αληθής | τ |
8 | ! | ψευδής |