Sady Swift: Ako ju používať a prečo? (S príkladmi)

V tomto výučbe sa dozviete o množinách, ich vytváraní, ich úpravách a niektorých bežných operáciách v množinách.

V predchádzajúcom článku o Swift Arrays sme sa dozvedeli o vytvorení poľa, ktoré môže obsahovať viac hodnôt v usporiadanom zozname.

Ak sa však musíme ubezpečiť, že zoznam môže obsahovať hodnotu iba raz, použijeme v Swifte množinu.

Čo je to súprava?

Sady sú jednoducho kontajner, ktorý môže obsahovať viac hodnôt dátového typu v neusporiadanom zozname a zaisťuje jedinečný prvok v kontajneri (tj. Každý údaj sa zobrazí iba raz).

Neusporiadaný zoznam znamená, že prvky nedostanete v rovnakom poradí, v akom ste definovali položky v množine.

Hlavnou výhodou použitia Sety nad poľami je, keď potrebujete zaistiť, aby sa položka objavila iba raz, a keď poradie položiek nie je dôležité.

Hodnoty uložené v sade musia byť hašovateľné . To znamená, že musí poskytnúť vlastnosť hashValue. To je dôležité, pretože množiny sú neusporiadané a na prístup k prvkom množín sa používa hodnota hashValue.

Všetky základné typy Swifta (napríklad String, Int, Doublea Bool) sú hashable v predvolenom nastavení a možno ju použiť ako typy nastavených hodnôt. Svoj Hashable Type však môžete vytvoriť aj v Swifte, ktorý je možné uložiť v sade.

Ako deklarovať množinu v Swifte?

Prázdnu množinu môžete vytvoriť zadaním typu ako Set a typu údajov, do ktorých sa môže uložiť.

Príklad 1: Vyhlásenie prázdnej množiny

 let emptyIntSet:Set = () print(emptyIntSet) 

ALEBO

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

Po spustení programu bude výstup:

 ()

Vo vyššie uvedenom programe sme deklarovali konštantnú emptyIntSet typu, Setktorá dokáže uložiť viac celočíselných hodnôt a inicializovať ich 0 hodnotami.

Pretože Swift je jazyk na odvodenie typov, môžete tiež vytvoriť množinu priamo bez zadania dátového typu, ale musíte ju inicializovať pomocou niektorých hodnôt, aby kompilátor mohol odvodiť svoj typ ako:

Príklad 2: Deklarovanie množiny s niektorými hodnotami

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

Po spustení programu bude výstup:

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

Vo vyššie uvedenom programe sme deklarovali konštantu someIntSet, ktorá dokáže ukladať množiny Integer bez výslovného určenia typu. :SetPri definovaní premennej však musíme písať , inak nám Swift vytvorí pole.

Rovnako ako polia sme pomocou zátvoriek inicializovali množinu s hodnotami 1, 2, 3, 4, 5, 6, 7, 8, 9() .

Ako ste sa dozvedeli, pri pokuse o vytlačenie hodnôt vo vnútri množiny ako print(someIntSet)získate výsledky v inom poradí, ako ste definovali položky v množine, pretože ukladá hodnotu bez definovaného poradia. Preto sa zakaždým, keď vstúpite do objednávky, zmení.

Príklad 3: Deklarovanie množiny s duplicitnými hodnotami

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

Po spustení programu bude výstup:

 („de“, „ab“, „cd“, „bc“)

Vo vyššie uvedenom programe sme v množine definovali duplicitnú hodnotu ab . A keď sa pokúsime získať prístup k hodnote vo vnútri množiny pomocou print(someStrSet), duplicitná hodnota sa zo súpravy automaticky odstráni. Preto sada zaručuje jedinečné prvky / hodnoty v nej.

V aplikácii Swift môžete tiež deklarovať sadu s vlastným prispôsobeným typom Hashable. Ak sa chcete dozvedieť viac, navštívte stránku Swift Hashable.

Ako získať prístup k prvkom množiny v Swifte?

Nemôžete získať prístup k prvkom množiny pomocou matice dolného indexu. Je to tak preto, lebo množiny sú usporiadané a nemajú indexy na prístup k prvkom.

Musíte teda k množine pristupovať pomocou jej metód a vlastností alebo pomocou slučiek for-in.

Príklad 4: Prístup k prvkom množiny

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

Po spustení programu bude výstup:

 de ab cd bc 

Vo vyššie uvedenom programe dostaneme val v inom poradí ako prvky množiny, pretože množiny sú na rozdiel od polí neusporiadané.

Môžete tiež získať prístup k prvku sady priamo odstránením hodnoty z množiny, ako je uvedené nižšie:

Príklad 5: Prístup k prvkom množiny pomocou remove ()

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

Po spustení programu bude výstup:

 Voliteľné ("cd") ("de", "ab", "bc") 

Vo vyššie uvedenom programe môžete vidieť, že metóda remove vráti voliteľný reťazec. Preto sa odporúča vykonať voliteľnú manipuláciu, ako je uvedené nižšie. Ak sa chcete dozvedieť viac informácií o voliteľných doplnkoch, navštívte stránku Swift Optionals.

Príklad 6: Voliteľné spracovanie pre 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") ) 

Po spustení programu bude výstup:

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

Ako pridať nový prvok do množiny?

Nový prvok môžete do sady pridať pomocou insert()metódy v aplikácii Swift.

Príklad 7: Pridanie nového prvku pomocou insert ()

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

Po spustení programu bude výstup:

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

Podobne môžete tiež použiť removeAllfunkciu na vyprázdnenie množiny.

Zaujímavé články...