Kiired komplektid: kuidas seda kasutada ja miks? (Näidetega)

Selles õpetuses saate teada komplektidest, komplektide loomisest, nende muutmisest ja mõnedest tavalistest toimingutest komplektides.

Eelmises artiklis Swift Arrays õppisime massiivi loomise kohta, mis mahutab järjestatud loendis mitu väärtust.

Kuid kui peame veenduma, et loend mahutab väärtust ainult üks kord, kasutame Swiftis komplekti.

Mis on komplekt?

Komplektid on lihtsalt konteiner, mis mahutab mitut andmetüübi väärtust järjestamata loendis ja tagab konteineris ainulaadse elemendi (st iga andmeid kuvatakse ainult üks kord).

Tellimata loend tähendab, et te ei saa elemente samas järjekorras, nagu olete komplektis elemendid määranud.

Komplektide massiivide kasutamise peamine eelis on see, kui peate tagama, et üksus ilmuks ainult üks kord ja kui üksuste järjekord pole oluline.

Komplekti salvestatud väärtused peavad olema räsitavad . See tähendab, et see peab pakkuma atribuudi hashValue. See on oluline, kuna komplektid on korrastamata ja komplektide elementidele juurde pääsemiseks kasutatakse hashValue.

Kõik Swifti põhitüüpi (näiteks String, Int, Double, ja Bool) on hashable vaikimisi ja saab kasutada komplekti väärtus tüübid. Kuid saate oma Swashi tüübi luua ka Swiftis, mida saab komplekti salvestada.

Kuidas Swiftis komplekti kuulutada?

Võite luua tühja komplekti, määrates tüübiks komplekti Set, millele järgneb andmete tüüp, mida see saab salvestada.

Näide 1: tühja komplekti deklareerimine

 let emptyIntSet:Set = () print(emptyIntSet) 

VÕI

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

Programmi käivitamisel on väljund järgmine:

 ()

Eespool nimetatud programmis oleme deklareerinud tüübi konstantse emptyIntSet, Setmis suudab salvestada mitu täisarvu ja initsialiseerida 0 väärtusega.

Kuna Swift on tüübi järelduskeel, saate ka komplekti luua otse ilma andmetüüpi määramata, kuid peate initsialiseerima mõne väärtusega, et kompilaator saaks selle tüübi järeldada järgmiselt:

Näide 2: hulga väärtustega deklareerimine

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

Programmi käivitamisel on väljund järgmine:

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

Ülalolevas programmis oleme deklareerinud konstandi someIntSet, mis saab salvestada täisarvu komplekte, ilma et tüüp oleks selgesõnaliselt täpsustatud. :SetMuutuja määratlemisel peame siiski kirjutama , vastasel juhul loob Swift meile massiivi.

Samuti oleme massiividena initsialiseerinud komplekti sulgudes 1, 2, 3, 4, 5, 6, 7, 8, 9 väärtustega ().

Nagu olete õppinud, kui proovite väärtusi komplekti sees printida print(someIntSet), saate tulemused teises järjekorras kui olete komplekti üksused määratlenud, kuna see salvestab väärtuse ilma kindla järjestuseta. Seetõttu muutub iga kord, kui tellimusele juurde pääsete.

Näide 3: Dublikeeritavate väärtustega komplekti deklareerimine

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

Programmi käivitamisel on väljund järgmine:

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

Eespool nimetatud programmis oleme komplektis määranud duplikaadi väärtuse ab . Ja. kui proovime pääseda juurde komplekti sees olevale print(someStrSet)väärtusele, eemaldatakse duplikaatväärtus komplektist automaatselt. Seetõttu tagab komplekt unikaalsed elemendid / väärtused selle sees.

Samuti saate Swiftis deklareerida komplekti omaenda kohandatud Räsitüübiga. Lisateabe saamiseks külastage veebisaiti Swift Hashable.

Kuidas Swiftis seatud elementidele juurde pääseda?

Massiividena alamindeksi süntaksit kasutades ei pääse komplekti elementidele juurde. Selle põhjuseks on asjaolu, et komplektid on korrastamata ja neil pole elementidele juurdepääsemiseks indekseid.

Niisiis, peate komplekti juurde pääsema, kasutades selle meetodeid ja omadusi või kasutades sisselülitamise tsükleid.

Näide 4: Juurdepääs komplekti elementidele

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

Programmi käivitamisel on väljund järgmine:

 de ab cd bc 

Eespool toodud programmis saame val-i erinevas järjestuses kui hulga elemendid, kuna hulgad on erinevalt massiividest korrastamata.

Saate juurde pääseda ka komplekti elemendile, eemaldades sellest otse väärtuse, nagu allpool:

Näide 5: Juurdepääs komplekti elementidele eemaldamise () abil

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

Programmi käivitamisel on väljund järgmine:

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

Ülaltoodud programmis näete, et eemaldamismeetod tagastab valikulise stringi. Seetõttu on soovitatav teha valikuline käitlemine nagu allpool. Lisateavet lisavarustuse kohta leiate saidilt Swift Optionals.

Näide 6: Eemaldamise () valikuline käitlemine

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

Programmi käivitamisel on väljund järgmine:

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

Kuidas lisada komplekti uut elementi?

insert()Swifti meetodi abil saate komplekti lisada uue elemendi .

Näide 7: uue elemendi lisamine insert () abil

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

Programmi käivitamisel on väljund järgmine:

 ("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") 

Sarnaselt saate removeAllfunktsiooni kasutada ka komplekti tühjendamiseks.

Huvitavad Artiklid...