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

I denne vejledning lærer du om sæt, opretter sæt, ændrer dem og nogle almindelige operationer i sæt.

I den forrige Swift Arrays-artikel lærte vi om at oprette matrix, der kan indeholde flere værdier i en ordnet liste.

Men hvis vi skal sørge for, at en liste kun kan indeholde en værdi en gang, bruger vi et sæt i Swift.

Hvad er et sæt?

Sæt er simpelthen en container, der kan indeholde flere værdier af datatypen i en ikke-ordnet liste og sikrer et unikt element i containeren (dvs. hver data vises kun en gang).

Uordnet liste betyder, at du ikke får elementerne i samme rækkefølge, som du definerede elementerne i sættet.

Den største fordel ved at bruge sæt over arrays er, når du skal sikre, at en vare kun vises en gang, og når rækkefølgen af ​​varer ikke er vigtig.

Værdier gemt i et sæt skal være hashable . Dette betyder, at det skal levere en hashValue-egenskab. Dette er vigtigt, fordi sæt ikke er ordnet, og det bruger hashValue bruges til at få adgang til elementerne i sætene.

Alle Swift grundlæggende typer (såsom String, Int, Doubleog Bool) er hashable som standard, og kan bruges som indstillede værdi typer. Du kan dog også oprette din Hashable Type i Swift, der kan gemmes i et sæt.

Hvordan erklærer jeg et sæt i Swift?

Du kan oprette et tomt sæt ved at angive typen som Set efterfulgt af typen af ​​data, den kan gemme inden i.

Eksempel 1: Erklæring om et tomt sæt

 let emptyIntSet:Set = () print(emptyIntSet) 

ELLER

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

Når du kører programmet, vil output være:

 ()

I ovenstående program har vi erklæret en konstant emptyIntSet af typen, Setder kan gemme flere værdier af heltal og initialiseret med 0-værdier.

Da Swift er et typeslutningssprog, kan du også oprette sæt direkte uden at specificere datatypen, men skal initialiseres med nogle værdier, så kompilatoren kan udlede dens type som:

Eksempel 2: Erklæring om et sæt med nogle værdier

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

Når du kører programmet, vil output være:

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

I ovenstående program har vi erklæret en konstant someIntSet, der kan gemme sæt af heltal uden at angive typen eksplicit. Vi skal dog skrive, :Setnår vi definerer variablen, ellers opretter Swift en matrix for os.

Som arrays har vi også initialiseret sættet med 1, 2, 3, 4, 5, 6, 7, 8, 9 værdier ved hjælp af ()parenteserne.

Som du har lært, når du prøver at udskrive værdierne inde i sættet som print(someIntSet), får du resultaterne i en anden rækkefølge, end du har defineret elementerne i sættet, fordi det gemmer værdi uden nogen defineret rækkefølge. Derfor ændres hver gang du får adgang til ordren.

Eksempel 3: Erklæring om et sæt med duplikerede værdier

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

Når du kører programmet, vil output være:

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

I ovenstående program har vi defineret en duplikatværdi ab i sættet. Og. når vi prøver at få adgang til værdien inde i sættet ved hjælp af print(someStrSet), fjernes den dobbelte værdi automatisk fra sættet. Derfor garanterer sæt unikke elementer / værdier inde i det.

Du kan også erklære et sæt med din egen brugerdefinerede Hashable-type i Swift. For at lære mere, besøg Swift Hashable.

Hvordan får man adgang til sætelementer i Swift?

Du kan ikke få adgang til elementer i et sæt ved hjælp af subscript-syntaks som arrays. Dette skyldes, at sæt er uordnet og ikke har indekser for at få adgang til elementerne.

Så du skal få adgang til sættet ved hjælp af dets metoder og egenskaber eller ved hjælp af in-loops.

Eksempel 4: Adgang til elementer i et sæt

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

Når du kører programmet, vil output være:

 de ab cd bc 

I ovenstående program får vi valget i anden rækkefølge end elementerne i et sæt, fordi sæt er uordnet i modsætning til arrays.

Du kan også få adgang til element i et sæt direkte ved at fjerne værdien fra sættet som nedenfor:

Eksempel 5: Adgang til elementer i et sæt ved hjælp af remove ()

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

Når du kører programmet, vil output være:

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

I ovenstående program kan du se, at fjernemetoden returnerer en valgfri streng. Derfor anbefales det, at du foretager valgfri håndtering som nedenfor. Hvis du vil vide mere om optioner, skal du besøge Swift Optionals.

Eksempel 6: Valgfri håndtering til fjernelse ()

 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 kører programmet, vil output være:

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

Hvordan tilføjes nyt element i et sæt?

Du kan tilføje et nyt element til et sæt ved hjælp af insert()metoden i Swift.

Eksempel 7: Tilføj nyt element ved hjælp af insert ()

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

Når du kører programmet, vil output 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åde kan du også bruge removeAllfunktionen til at tømme et sæt.

Interessante artikler...