Свифт сетови: како га користити и зашто? (Са примерима)

У овом упутству ћете научити о скуповима, креирању скупова, њиховом модификовању и неким уобичајеним операцијама у скуповима.

У претходном чланку Свифт Арраис сазнали смо о стварању низа који може да садржи више вредности на уређеној листи.

Али, ако морамо бити сигурни да листа може да садржи вредност само једном, користимо скуп у Свифту.

Шта је сет?

Сет је једноставно контејнер који може да садржи више вредности типа података на неуређеној листи и осигурава јединствени елемент у контејнеру (тј. Сваки податак се појављује само једном).

Неуређена листа значи да нећете добити елементе истим редоследом као што сте дефинисали ставке у скупу.

Главна предност коришћења скупова над низовима је када требате осигурати да се ставка појави само једном и када редослед ставки није важан.

Вредности ускладиштене у скупу морају бити распршиве . То значи да мора да обезбеди својство хасхВалуе. Ово је важно јер су скупови неуређени и користи хасхВалуе који се користи за приступ елементима скупова.

Све основних типова Свифт је (као што су String, Int, Double, и Bool) су хасхабле подразумевано, а може се користити као постављених врсте вредности. Међутим, такође можете да направите свој хасхабле типе у Свифту који се може чувати у сету.

Како прогласити сет у Свифту?

Можете створити празан скуп тако што ћете одредити тип као Сет, а затим тип података у који може да се ускладишти.

Пример 1: Проглашавање празног скупа

 let emptyIntSet:Set = () print(emptyIntSet) 

ИЛИ

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

Када покренете програм, излаз ће бити:

 ()

У горњем програму смо прогласили константу типа емптиИнтСет Setкоја може да ускладишти више вредности целих бројева и иницијализованих са 0 вредности.

Будући да је Свифт језик закључивања типа, скуп можете креирати и директно без навођења типа података, али мора се иницијализовати неким вредностима како би компајлер могао да закључи о његовом типу као:

Пример 2: Декларисање скупа са неким вредностима

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

Када покренете програм, излаз ће бити:

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

У горе наведеном програму прогласили смо константу сомеИнтСет која може чувати скупове Интегер-а без изричитог навођења типа. Међутим, морамо писати :Setприликом дефинисања променљиве, иначе ће Свифт створити низ за нас.

Такође, као низови, иницијализовали смо скуп са вредностима 1, 2, 3, 4, 5, 6, 7, 8, 9 користећи ()заграде.

Као што сте сазнали, када покушате да вредности унутар скупа одштампате као print(someIntSet), добићете резултате другачијим редоследом него што сте дефинисали ставке у скупу, јер он чува вредност без дефинисаног редоследа. Стога се сваки пут када приступите редоследу мења.

Пример 3: Декларисање скупа двоструким вредностима

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

Када покренете програм, излаз ће бити:

 ("де", "аб", "цд", "бц")

У горе наведеном програму дефинисали смо дупликат вредности аб у скупу. И. када покушавамо да приступимо вредности унутар скупа користећи print(someStrSet)дуплирану вредност, аутоматски се уклања из скупа. Стога сет гарантује јединствене елементе / вредности унутар њега.

Такође можете да пријавите сет са својим прилагођеним Хасхабле типом у Свифт-у. Да бисте сазнали више, посетите Свифт Хасхабле.

Како приступити елементима скупа у Свифту?

Не можете приступити елементима скупа користећи синтаксу индекса као низове. То је зато што скупови нису уређени и немају индексе за приступ елементима.

Дакле, морате да приступите скупу користећи његове методе и својства или користећи петље за улазак.

Пример 4: Приступ елементима скупа

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

Када покренете програм, излаз ће бити:

 де аб цд бц 

У горњем програму добијамо вал другачијим редоследом од елемената скупа јер су скупови неуређени за разлику од низова.

Такође можете приступити елементу скупа директно уклањајући вредност из скупа као што је приказано испод:

Пример 5: Приступ елементима скупа помоћу уклањања ()

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

Када покренете програм, излаз ће бити:

 Необвезно ("цд") ("де", "аб", "бц") 

У горњем програму можете видети да метода уклања враћа опционални низ. Због тога вам се препоручује да необавезно рукујете како је доле наведено. Да бисте сазнали више о опцијама, посетите компанију Свифт Оптионалс.

Пример 6: Необавезно руковање уклањањем ()

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

Када покренете програм, излаз ће бити:

 цд ("де", "аб", "бц") 

Како додати нови елемент у скуп?

Можете додати нови елемент скупу помоћу insert()методе у Свифт-у.

Пример 7: Додајте нови елемент помоћу инсерт ()

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

Када покренете програм, излаз ће бити:

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

Слично томе, можете користити и removeAllфункцију за пражњење сета.

Занимљиви Чланци...