Swift Sets: hoe te gebruiken en waarom? (Met voorbeelden)

In deze zelfstudie leert u over sets, het maken van sets, het wijzigen ervan en enkele algemene bewerkingen in sets.

In het vorige Swift Arrays-artikel hebben we geleerd over het maken van een array die meerdere waarden in een geordende lijst kan bevatten.

Maar als we ervoor moeten zorgen dat een lijst maar één keer een waarde kan bevatten, gebruiken we een set in Swift.

Wat is een set?

Sets is gewoon een container die meerdere waarden van het gegevenstype in een ongeordende lijst kan bevatten en een uniek element in de container garandeert (dwz dat elke gegevens slechts één keer verschijnt).

Een ongeordende lijst betekent dat u de elementen niet in dezelfde volgorde krijgt als waarin u de items in de set hebt gedefinieerd.

Het belangrijkste voordeel van het gebruik van sets ten opzichte van arrays is wanneer u ervoor moet zorgen dat een item maar één keer voorkomt en wanneer de volgorde van items niet belangrijk is.

Waarden die in een set zijn opgeslagen, moeten hashable zijn . Dit betekent dat het een eigenschap hashValue moet leveren. Dit is belangrijk omdat sets ongeordend zijn en het hashValue gebruikt om toegang te krijgen tot de elementen van de sets.

Al basistypen Swift (zoals String, Int, Double, en Bool) zijn hashable standaard, en kan gebruikt worden als set value types. U kunt echter ook uw hash-type in Swift maken dat in een set kan worden opgeslagen.

Hoe declareer je een set in Swift?

U kunt een lege set maken door het type op te geven als Set, gevolgd door het type gegevens dat erin kan worden opgeslagen.

Voorbeeld 1: een lege set declareren

 let emptyIntSet:Set = () print(emptyIntSet) 

OF

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

Wanneer u het programma uitvoert, is de uitvoer:

 ()

In het bovenstaande programma hebben we een constante emptyIntSet van het type gedeclareerd Setdat meerdere waarden van integer kan opslaan en geïnitialiseerd met 0 waarden.

Omdat Swift een type-inferentietaal is, kunt u ook rechtstreeks een set maken zonder het gegevenstype op te geven, maar moet u initialiseren met enkele waarden zodat de compiler het type kan afleiden als:

Voorbeeld 2: een set declareren met enkele waarden

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

Wanneer u het programma uitvoert, is de uitvoer:

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

In het bovenstaande programma hebben we een constante someIntSet gedeclareerd die sets van Integer kan opslaan zonder het type expliciet op te geven. We moeten echter schrijven :Setbij het definiëren van de variabele, anders maakt Swift een array voor ons.

Ook hebben we als arrays de set geïnitialiseerd met 1, 2, 3, 4, 5, 6, 7, 8, 9 waarden met behulp van de ()haakjes.

Zoals je hebt geleerd, print(someIntSet)krijg je de resultaten in een andere volgorde als je de waarden in de set probeert af te drukken als dat je de items in de set hebt gedefinieerd, omdat het waarde opslaat zonder gedefinieerde volgorde. Daarom wordt elke keer dat u de bestelling opent, gewijzigd.

Voorbeeld 3: een set declareren met dubbele waarden

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

Wanneer u het programma uitvoert, is de uitvoer:

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

In het bovenstaande programma hebben we een dubbele waarde ab in de set gedefinieerd. En. wanneer we proberen toegang te krijgen tot de waarde in de set met print(someStrSet), wordt de dubbele waarde automatisch uit de set verwijderd. Daarom garandeert set unieke elementen / waarden erin.

Je kunt ook een set declareren met je eigen aangepaste hash-type in Swift. Bezoek Swift Hashable voor meer informatie.

Hoe toegang krijgen tot set-elementen in Swift?

U hebt geen toegang tot elementen van een set met de subscriptsyntaxis als arrays. Dit komt doordat sets ongeordend zijn en geen indices hebben om toegang te krijgen tot de elementen.

U moet dus toegang krijgen tot de set met behulp van de methoden en eigenschappen of met for-in-lussen.

Voorbeeld 4: toegang krijgen tot elementen van een set

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

Wanneer u het programma uitvoert, is de uitvoer:

 de ab cd bc 

In het bovenstaande programma krijgen we de val in een andere volgorde dan de elementen van een set omdat sets ongeordend zijn in tegenstelling tot arrays.

U kunt ook rechtstreeks toegang krijgen tot het element van een set door de waarde uit de set te verwijderen, zoals hieronder:

Voorbeeld 5: toegang krijgen tot elementen van een set met remove ()

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

Wanneer u het programma uitvoert, is de uitvoer:

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

In het bovenstaande programma kun je zien dat de verwijdermethode een optionele string retourneert. Daarom wordt aanbevolen om optionele afhandeling uit te voeren, zoals hieronder. Bezoek Swift Optionals voor meer informatie over optionele producten.

Voorbeeld 6: optionele behandeling voor remove ()

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

Wanneer u het programma uitvoert, is de uitvoer:

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

Hoe voeg ik een nieuw element toe aan een set?

U kunt een nieuw element aan een set toevoegen met de insert()methode in Swift.

Voorbeeld 7: voeg een nieuw element toe met insert ()

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

Wanneer u het programma uitvoert, is de uitvoer:

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

Evenzo kunt u de removeAllfunctie ook gebruiken om een ​​set leeg te maken.

Interessante artikelen...