Swift Sets: Hvordan bruke det og hvorfor? (Med eksempler)

I denne opplæringen vil du lære om sett, lage sett, endre dem og noen vanlige operasjoner i sett.

I den forrige artikkelen om Swift Arrays lærte vi om å lage matrise som kan inneholde flere verdier i en ordnet liste.

Men hvis vi må sørge for at en liste bare kan inneholde en verdi en gang, bruker vi et sett i Swift.

Hva er et sett?

Sett er ganske enkelt en beholder som kan inneholde flere verdier av datatypen i en ikke-ordnet liste og sikrer et unikt element i beholderen (dvs. at hver data vises bare en gang).

Uordnet liste betyr at du ikke får elementene i samme rekkefølge som du definerte elementene i settet.

Den største fordelen med å bruke sett over matriser er når du trenger å sikre at en vare bare vises en gang, og når rekkefølgen på varene ikke er viktig.

Verdier lagret i et sett må være hashable . Dette betyr at den må tilby en hashValue-eiendom. Dette er viktig fordi sett er uordnet og det bruker hashValue brukes til å få tilgang til elementene i settene.

Alle Swift grunntyper (for eksempel String, Int, Double, og Bool) er hashable som standard, og kan brukes som faste verdityper. Du kan imidlertid også lage din Hashable Type i Swift som kan lagres i et sett.

Hvordan erklære jeg et sett i Swift?

Du kan opprette et tomt sett ved å spesifisere typen som sett etterfulgt av datatypen den kan lagre i.

Eksempel 1: Erklære et tomt sett

 let emptyIntSet:Set = () print(emptyIntSet) 

ELLER

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

Når du kjører programmet, vil utdataene være:

 ()

I det ovennevnte programmet har vi erklært et konstant tomtIntSett av typen Setsom kan lagre flere verdier av heltall og initialisert med 0-verdier.

Siden Swift er et språk som skriver typen, kan du også opprette sett direkte uten å spesifisere datatypen, men må initialiseres med noen verdier slik at kompilatoren kan utlede typen som:

Eksempel 2: Deklarere et sett med noen verdier

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

Når du kjører programmet, vil utdataene være:

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

I det ovennevnte programmet har vi erklært et konstant someIntSet som kan lagre sett med heltal uten å spesifisere typen eksplisitt. Vi må imidlertid skrive :Setnår vi definerer variabelen, ellers vil Swift lage en matrise for oss.

Som arrays har vi også initialisert settet med 1, 2, 3, 4, 5, 6, 7, 8, 9 verdier ved hjelp av ()parentesene.

Som du har lært, når du prøver å skrive ut verdiene i settet som print(someIntSet), vil du få resultatene i en annen rekkefølge enn du har definert elementene i settet fordi den lagrer verdi uten definert rekkefølge. Derfor endres hver gang du får tilgang til ordren.

Eksempel 3: Deklarere et sett med dupliserte verdier

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

Når du kjører programmet, vil utdataene være:

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

I programmet ovenfor har vi definert en duplikatverdi ab i settet. Og. når vi prøver å få tilgang til verdien i settet ved hjelp av print(someStrSet), blir duplikatverdien automatisk fjernet fra settet. Derfor garanterer sett unike elementer / verdier inni den.

Du kan også erklære et sett med din egen tilpassede Hashable-type i Swift. For å lære mer, besøk Swift Hashable.

Hvordan få tilgang til settelementer i Swift?

Du kan ikke få tilgang til elementer i et sett ved hjelp av abonnementsyntaks som matriser. Dette er fordi sett er uordnet og ikke har indekser for å få tilgang til elementene.

Så du må få tilgang til settet ved hjelp av metoder og egenskaper eller ved hjelp av for-in-løkker.

Eksempel 4: Få tilgang til elementer i et sett

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

Når du kjører programmet, vil utdataene være:

 de ab cd bc 

I det ovennevnte programmet får vi valen i annen rekkefølge enn elementene i et sett fordi sett er uordnet i motsetning til arrays.

Du kan også få tilgang til et element i et sett som direkte fjerner verdien fra settet som nedenfor:

Eksempel 5: Få tilgang til elementer i et sett ved hjelp av remove ()

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

Når du kjører programmet, vil utdataene være:

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

I programmet ovenfor kan du se at metoden for fjerning returnerer en valgfri streng. Derfor anbefales det at du gjør valgfri håndtering som nedenfor. For å lære mer om tilleggsutstyr, besøk Swift-tilleggsutstyr.

Eksempel 6: Valgfri håndtering for fjerning ()

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

Når du kjører programmet, vil utdataene være:

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

Hvordan legge til nytt element i et sett?

Du kan legge til et nytt element i et sett ved hjelp av insert()metoden i Swift.

Eksempel 7: Legg til nytt element ved hjelp av insert ()

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

Når du kjører programmet, vil utdataene være:

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

På samme måte kan du også bruke removeAllfunksjonen til å tømme et sett.

Interessante artikler...