Swift-sarjat: Kuinka sitä käytetään ja miksi? (Esimerkkejä)

Tässä opetusohjelmassa opit joukkoista, sarjojen luomisesta, muokkaamisesta ja joistakin yleisistä sarjoissa tehtävistä toiminnoista.

Edellisessä Swift Arrays -artikkelissa opimme luomaan taulukon, joka mahtuu useita arvoja järjestettyyn luetteloon.

Mutta jos meidän on varmistettava, että luettelossa voi olla arvo vain kerran, käytämme joukkoa Swiftissä.

Mikä on sarja?

Sarjat on yksinkertaisesti säilö, johon mahtuu useita tietotyypin arvoja järjestämättömässä luettelossa ja joka varmistaa säilössä ainutlaatuisen elementin (ts. Jokainen tieto näkyy vain kerran).

Järjestämätön luettelo tarkoittaa, että et saa elementtejä samassa järjestyksessä kuin määritit Sarjan kohteet.

Sarjoiden käytön tärkein etu matriisien kanssa on, kun sinun on varmistettava, että kohde näkyy vain kerran ja kun kohteiden järjestys ei ole tärkeä.

Sarjaan tallennettujen arvojen on oltava haettavissa . Tämä tarkoittaa, että sen on annettava hashValue-ominaisuus. Tämä on tärkeää, koska joukot ovat järjestämättömiä ja se käyttää hashValue-arvoa pääsyyn joukkoelementteihin.

Kaikki Swiftin perustyyppiä (kuten String, Int, Double, ja Bool) ovat hashable oletuksena, ja sitä voidaan käyttää asetettu arvo tyyppejä. Voit kuitenkin luoda myös Hashable Type -sovelluksen Swiftissä, joka voidaan tallentaa sarjaan.

Kuinka julistaa sarja Swiftissä?

Voit luoda tyhjän joukon määrittämällä tyypiksi Set ja sen jälkeen tietojen tyypin, johon se voi tallentaa.

Esimerkki 1: Tyhjän sarjan ilmoittaminen

 let emptyIntSet:Set = () print(emptyIntSet) 

TAI

 let emptyIntSet:Set = Set() print(emptyIntSet) 

Kun suoritat ohjelmaa, tulos on:

 ()

Yllä olevassa ohjelmassa olemme ilmoittaneet vakiotyypin tyhjästäSetSet, Setjoka voi tallentaa useita kokonaisluvun arvoja ja alustaa 0 arvolla.

Koska Swift on tyypin päättelykieli, voit myös luoda joukon suoraan määrittelemättä tietotyyppiä, mutta on alustettava joillakin arvoilla, jotta kääntäjä voi päätellä sen tyypin seuraavasti:

Esimerkki 2: Joukon ilmoittaminen joillakin arvoilla

 let someIntSet:Set = (1, 2, 3, 4, 5, 6, 7, 8, 9) print(someIntSet) 

Kun suoritat ohjelmaa, tulos on:

 (2, 4, 9, 5, 6, 7, 3, 1, 8)

Yllä olevassa ohjelmassa olemme ilmoittaneet vakion someIntSet, joka voi tallentaa kokonaislukumääriä määrittelemättä tyyppiä nimenomaisesti. Meidän on kuitenkin kirjoitettava :Setmuuttujaa määritettäessä, muuten Swift luo meille taulukon.

Myös matriiseina olemme alustaneet sarjan 1, 2, 3, 4, 5, 6, 7, 8, 9- arvoilla ()suluissa.

Kuten olet oppinut, kun yrität tulostaa arvot ryhmän sisällä nimellä print(someIntSet), saat tulokset eri järjestyksessä kuin olet määrittänyt joukon kohteet, koska se tallentaa arvon ilman määritettyä järjestystä. Siksi joka kerta, kun avaat tilauksen, se muuttuu.

Esimerkki 3: Joukko ilmoitetaan päällekkäisillä arvoilla

 let someStrSet:Set = ("ab","bc","cd","de","ab") print(someStrSet) 

Kun suoritat ohjelmaa, tulos on:

 ("de", "ab", "cd", "bc")

Yllä olevassa ohjelmassa olemme määritelleet kopion arvon ab joukosta. Ja. kun yritämme käyttää joukon sisäistä arvoa käyttämällä print(someStrSet), kaksoisarvo poistetaan automaattisesti joukosta. Siksi sarja takaa ainutlaatuiset elementit / arvot sen sisällä.

Voit myös ilmoittaa sarjan omalla mukautetulla Hashable-tyyppilläsi Swiftissä. Saat lisätietoja käymällä Swift Hashable -sivustolla.

Kuinka käyttää asetettuja elementtejä Swiftissä?

Et voi käyttää ryhmän elementtejä, jotka käyttävät alaindeksin syntaksia matriiseina. Tämä johtuu siitä, että joukot ovat järjestämättömiä ja niillä ei ole indeksejä pääsyyn elementteihin.

Joten sinun on käytettävä sarjaa sen menetelmillä ja ominaisuuksilla tai käyttämällä sisääntulosilmukoita.

Esimerkki 4: Joukon elementtien käyttö

 var someStrSet:Set = ("ab", "bc", "cd", "de") for val in someStrSet ( print(val) ) 

Kun suoritat ohjelmaa, tulos on:

 de ab cd bc 

Yllä olevassa ohjelmassa saamme val eri järjestyksessä kuin joukon elementit, koska joukot ovat järjestämättömiä, toisin kuin matriisit.

Voit myös käyttää sarjan elementtiä poistamalla arvon suoraan joukosta seuraavasti:

Esimerkki 5: Joukon elementtien käyttö poistamalla ()

 var someStrSet:Set = ("ab", "bc", "cd", "de") let someVal = someStrSet.remove("cd") print(someVal) print(someStrSet) 

Kun suoritat ohjelmaa, tulos on:

 Valinnainen ("cd") ("de", "ab", "bc") 

Yllä olevassa ohjelmassa näet, että poistomenetelmä palauttaa valinnaisen merkkijonon. Siksi on suositeltavaa tehdä valinnainen käsittely kuten alla. Lisätietoja optioista käy Swift Optionals -sivulla.

Esimerkki 6: Valinnainen käsittely poistaaksesi ()

 var someStrSet:Set = ("ab", "bc", "cd", "de") if let someVal = someStrSet.remove("cd") ( print(someVal) print(someStrSet) ) else ( print("cannot find element to remove") ) 

Kun suoritat ohjelmaa, tulos on:

 cd ("de", "ab", "bc") 

Kuinka lisätä uusi elementti sarjaan?

Voit lisätä uuden elementin sarjaan insert()Swiftin menetelmällä.

Esimerkki 7: Lisää uusi elementti insertillä ()

 var someStrSet:Set = ("ab", "bc", "cd", "de") someStrSet.insert("ef") print(someStrSet) 

Kun suoritat ohjelmaa, tulos on:

 ("ab", "de", "cd", "ef", "bc")

In the above program, we used the set's insert() method to add a new element to a set. Since, sets are unordered, the position of the inserted element isn't known.

Set Operations

Another main advantage of using Sets is you can perform set operations such as combining two sets together, determining which values two sets have in common etc. This operations are similar to the Set operation in Mathematics.

1. Union

The union of two sets a and b is the set of elements which are in a, or b, or in both a and b.

 let a: Set = (1, 3, 5, 7, 9) let b: Set = (0, 2, 4, 6, 8) print(a.union(b)) 

When you run the above program, the output will be:

 (8, 2, 9, 4, 5, 7, 6, 3, 1, 0)

2. Intersection

The intersection of two sets a and b is the set that contains all elements of a that also belong to b.

 let a: Set = (1, 3, 5, 7, 9) let b: Set = (0, 3, 7, 6, 8) print(a.intersection(b)) 

When you run the above program, the output will be:

 (7, 3)

Therefore, print(a.intersection(b)) outputs a new set with values (7, 3) that are common in both a and b.

3. Subtracting

The subtraction of two sets a and b is the set that contains all elements of a but removing the elements that also belong to b.

 let a: Set = (1, 3, 5, 7, 9) let b: Set = (0, 3, 7, 6, 8) print(a.subtracting(b)) 

When you run the above program, the output will be:

 (5, 9, 1)

Therefore, print(a.subtracting(b)) outputs a new set with values (5, 9, 1).

4. Symmetric Difference

The symmetric difference of two sets a and b is the set that contains all elements which are in either of the sets but not in both of them.

 let a: Set = (1, 3, 5, 7, 9) let b: Set = (0, 3, 7, 6, 8) print(a.symmetricDifference(b)) 

When you run the above program, the output will be:

 (5, 6, 8, 0, 1, 9)

Therefore, print(a.symmetricDifference(b)) outputs a new set with values (5, 6, 8, 0, 1, 9).

Set Membership and Equality Operations

Set Equality

You can use == operator to check whether two sets contains same elements or not. It returns true if two sets contains same elements otherwise returns false.

Example 5: Set equality operations

 let a: Set = (1, 3, 5, 7, 9) let b: Set = (0, 3, 7, 6, 8) let c:Set = (9, 7, 3, 1, 5) if a == b ( print("a and b are same") ) else ( print("a and b are different") ) if a == c ( print("a and c are same") ) else ( print("a and c are different") ) 

When you run the above program, the output will be:

 a and b are different a and c are same

Set membership

You can also check relationship between two sets using the following methods:

  • isSubset(of:)This method determines whether all of the values of a set are contained in the specified set.
  • isSuperset(of:) This method determines whether a set contains all of the values in a specified set
  • isStrictSubset(of:) or isStrictSuperset(of:): This method determines whether a set is a subset or superset, but not equal to, a specified set.
  • isDisjoint(with:) This method determines whether two sets have no values in common.

Example 6: Set membership operations

 let a: Set = (1, 3, 5, 7, 9) let b: Set = (0, 3, 1, 7, 6, 8, 9, 5) print("isSubset:", a.isSubset(of: b)) print("isSuperset:", b.isSuperset(of: a)) print("isStrictSubset:", a.isStrictSubset(of: b)) print("isDisjointWith:", a.isDisjoint(with: b)) 

When you run the above program,the output will be:

 isSubset: true isSuperset: true isStrictSubset: true isDisjointWith: false 

Let's analyze methods used inside the print statement below:

  • isSubsetreturns true because the set b contains all the elements in a
  • isSupersetreturn true because b contains all of the values of a.
  • isStrictSubsetreturns true because set b contains all the element in a and both sets are not equal.
  • isDisjointWithreturns false because a and b have some values in common.

Some helpful built in Set functions & properties

1. isEmpty

This property determines if a set is empty or not. It returns true if a set does not contain any value otherwise returns false.

Example 7: How isEmpty works?

 let intSet:Set = (21, 34, 54, 12) print(intSet.isEmpty) 

When you run the program, the output will be:

 false

2. first

This property is used to access first element of a set.

Example 8: How first works?

 let intSet = (21, 34, 54, 12) print(intSet.first) 

When you run the program, the output will be:

 Optional(54)

Since set is an unordered collection, the first property does not guarantee the first element of the set. You may get other value than 54.

Similarly, you can use last property to access last element of a set.

3. insert

The insert function is used to insert/append element in the set.

Example 9: How insert works?

 var intSet:Set = (21, 34, 54, 12) intSet.insert(50) print(intSet) 

When you run the program, the output will be:

 (54, 12, 50, 21, 34)

4. reversed

This function returns the elements of a set in reverse order.

Example 10: How reversed() works?

 var intSet:Set = (21, 22, 23, 24, 25) print(intSet) let reversedSet = intSet.reversed() print(reversedSet) 

When you run the program, the output will be:

 (22, 23, 21, 24, 25) (25, 24, 21, 23, 22) 

5. count

This property returns the total number of elements in a set.

Example 11: How count works?

 let floatSet:Set = (10.2, 21.3, 32.0, 41.3) print(floatSet.count) 

When you run the program, the output will be:

 4

6. removeFirst

This function removes and returns the first value from the set.

Example 12: How removeFirst works?

 var strSet:Set = ("ab", "bc", "cd", "de") let removedVal = strSet.removeFirst() print("removed value is (removedVal)") print(strSet) 

When you run the program, the output will be:

 removed value is de ("ab", "cd", "bc") 

Vastaavasti voit myös käyttää removeAllfunktiota tyhjentämään joukon.

Mielenkiintoisia artikkeleita...