Sady Swift: Jak ji používat a proč? (S příklady)

V tomto kurzu se dozvíte o sadách, vytváření sad, jejich úpravách a některých běžných operacích v sadách.

V předchozím článku Swift Arrays jsme se dozvěděli o vytvoření pole, které může obsahovat více hodnot v uspořádaném seznamu.

Pokud se ale musíme ujistit, že seznam může obsahovat hodnotu pouze jednou, použijeme sadu v Swiftu.

Co je to sada?

Sady je jednoduše kontejner, který může obsahovat více hodnot datového typu v neuspořádaném seznamu a zajišťuje jedinečný prvek v kontejneru (tj. Každá data se zobrazí pouze jednou).

Neuspořádaný seznam znamená, že nedostanete prvky ve stejném pořadí, v jakém jste definovali položky v sadě.

Hlavní výhodou používání sad přes pole je, když potřebujete zajistit, aby se položka objevila pouze jednou, a když není důležité pořadí položek.

Hodnoty uložené v sadě musí být hashovatelné . To znamená, že musí poskytnout vlastnost hashValue. To je důležité, protože sady jsou neuspořádané a používá hashValue se používá pro přístup k prvkům sad.

Všechny základní typy Swifta (například String, Int, Doublea Bool) jsou hashable ve výchozím nastavení a lze ji použít jako typy nastavených hodnot. Můžete však také vytvořit svůj Hashable Type v Swiftu, který lze uložit v sadě.

Jak deklarovat sadu v Swift?

Prázdnou sadu můžete vytvořit zadáním typu jako Set následovaného typem dat, do kterých může ukládat.

Příklad 1: Deklarace prázdné sady

 let emptyIntSet:Set = () print(emptyIntSet) 

NEBO

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

Když spustíte program, výstup bude:

 ()

Ve výše uvedeném programu jsme deklarovali konstantní emptyIntSet typu, Setkterý může ukládat více hodnot celého čísla a inicializovat s 0 hodnotami.

Vzhledem k tomu, že Swift je jazyk pro odvození typu, můžete také vytvořit sadu přímo bez zadání datového typu, ale musíte ji inicializovat pomocí některých hodnot, aby kompilátor mohl odvodit svůj typ jako:

Příklad 2: Deklarování množiny s některými hodnotami

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

Když spustíte program, výstup bude:

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

Ve výše uvedeném programu jsme deklarovali konstantu someIntSet, která může ukládat sady Integer bez výslovného zadání typu. :SetPři definování proměnné však musíme psát , jinak pro nás Swift vytvoří pole.

Jako pole jsme také inicializovali sadu s hodnotami 1, 2, 3, 4, 5, 6, 7, 8, 9 pomocí ()závorek.

Jak jste se dozvěděli, při pokusu o tisk hodnot uvnitř sady jako print(someIntSet)získáte výsledky v jiném pořadí, než jste definovali položky v sadě, protože ukládá hodnotu bez definovaného řazení. Proto se pokaždé, když vstoupíte do objednávky, změní.

Příklad 3: Deklarování sady s duplicitními hodnotami

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

Když spustíte program, výstup bude:

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

Ve výše uvedeném programu jsme v sadě definovali duplicitní hodnotu ab . A. když se pokusíme získat přístup k hodnotě uvnitř sady pomocí print(someStrSet), duplicitní hodnota je ze sady automaticky odstraněna. Sada proto zaručuje jedinečné prvky / hodnoty uvnitř.

V aplikaci Swift můžete také deklarovat sadu s vlastním vlastním typem Hashable. Další informace najdete na stránce Swift Hashable.

Jak získat přístup k prvkům sady v Swiftu?

Nemůžete přistupovat k prvkům sady pomocí syntaxe dolního indexu jako polí. Důvodem je, že sady jsou neuspořádané a nemají indexy pro přístup k prvkům.

Musíte tedy přistupovat k sadě pomocí jejích metod a vlastností nebo pomocí smyček pro vstup.

Příklad 4: Přístup k prvkům sady

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

Když spustíte program, výstup bude:

 de ab cd bc 

Ve výše uvedeném programu dostaneme val v jiném pořadí než prvky sady, protože sady jsou na rozdíl od polí neuspořádané.

Můžete také přistupovat k prvku sady přímo odebráním hodnoty ze sady, jak je uvedeno níže:

Příklad 5: Přístup k prvkům sady pomocí remove ()

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

Když spustíte program, výstup bude:

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

Ve výše uvedeném programu můžete vidět, že metoda remove vrací volitelný řetězec. Proto se doporučuje provést volitelnou manipulaci, jak je uvedeno níže. Další informace o volitelných doplňcích najdete na stránce Swift Optionals.

Příklad 6: Volitelné zpracování pro 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") ) 

Když spustíte program, výstup bude:

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

Jak přidat nový prvek do sady?

Můžete přidat nový prvek do sady pomocí insert()metody v Swift.

Příklad 7: Přidat nový prvek pomocí insert ()

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

Když spustíte program, výstup bude:

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

Podobně můžete také použít removeAllfunkci k vyprázdnění sady.

Zajímavé články...