Swift szettek: Hogyan kell használni és miért? (Példákkal)

Ebben az oktatóanyagban megismerkedhet a halmazokkal, halmazok létrehozásával, módosításával és néhány közös művelettel a halmazokban.

Az előző Swift tömb cikkben megtudtuk, hogyan hozhat létre tömböt, amely több értéket is tartalmazhat egy rendezett listában.

De ha meg kell győződnünk arról, hogy egy lista csak egyszer tartalmazhat-e értéket, akkor a Swift-ben halmazt használunk.

Mi az a készlet?

A Sets egyszerűen olyan tároló, amely egy adattípus több értékét képes elrendezni egy rendezetlen listában, és biztosítja az egyedi elemet a tárolóban (azaz minden adat csak egyszer jelenik meg).

A nem rendezett lista azt jelenti, hogy az elemeket nem ugyanabban a sorrendben kapja meg, mint ahogyan a készletben megadta az elemeket.

A Készletek tömbökhöz viszonyított használatának legfőbb előnye, amikor meg kell győződnie arról, hogy egy elem csak egyszer jelenik meg, és amikor az elemek sorrendje nem fontos.

A készletben tárolt értékeknek hashable- nek kell lenniük . Ez azt jelenti, hogy meg kell adnia egy hashValue tulajdonságot. Ez azért fontos, mert a halmazok rendezetlenek, és a hashValue értéket használja a halmazok elemeihez való hozzáféréshez.

Minden Swift alaptípus (például String, Int, Doubleés Bool) vannak hashable alapból, lehet használni, mint beállított érték típusok. Ugyanakkor létrehozhatja a Hashable Type-ot a Swift-ben is, amely egy készletben tárolható.

Hogyan lehet deklarálni a készletet a Swiftben?

Létrehozhat egy üres halmazt, ha megadja a típust halmazként, majd azt az adattípust, amelyen belül tárolható.

1. példa: Üres halmaz deklarálása

 let emptyIntSet:Set = () print(emptyIntSet) 

VAGY

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

A program futtatásakor a kimenet a következő lesz:

 ()

A fenti programban deklaráltunk egy állandó emptyIntSet típusú típust Set, amely több egész értéket képes tárolni és 0 értékkel inicializálva van.

Mivel a Swift egy típusú következtetési nyelv, közvetlenül is létrehozhat készletet az Adattípus megadása nélkül, de néhány értékkel inicializálnia kell, hogy a fordító a következőképpen következtethessen a típusára:

2. példa: Egy halmaz deklarálása néhány értékkel

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

A program futtatásakor a kimenet a következő lesz:

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

A fenti programban deklaráltunk egy konstans someIntSet-et, amely tárolni tudja az Integer halmazait anélkül, hogy a típust kifejezetten megadná. A :Setváltozó definiálásakor azonban írnunk kell , különben a Swift tömböt hoz létre számunkra.

Tömbökként inicializáltuk a halmazt 1, 2, 3, 4, 5, 6, 7, 8, 9 értékekkel a ()zárójelek segítségével.

Mint megtudta, amikor megpróbálja a készleten belüli értékeket kinyomtatni print(someIntSet), más sorrendben kapja meg az eredményeket, mint amennyit a halmazban definiált, mert az értékeket tárol, meghatározott sorrend nélkül. Ezért a megrendelés minden egyes megnyitásakor megváltozik.

3. példa: Egy halmaz deklarálása ismétlődő értékekkel

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

A program futtatásakor a kimenet a következő lesz:

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

A fenti programban meghatároztunk egy ab duplikát a halmazban. És. amikor megpróbáljuk elérni a halmazon belüli értéket a használatával print(someStrSet), akkor a duplikált érték automatikusan eltávolításra kerül a halmazból. Ezért a set egyedi elemeket / értékeket garantál benne.

A Swiftben deklarálhat egy készletet is saját egyedi Hashable típusával. További információkért látogasson el a Swift Hashable oldalra.

Hogyan lehet elérni a Swift halmazelemeit?

A halmaz elemeihez nem férhet hozzá, ha tömbként használja az index indexszintaxisát. A halmazok rendezetlenek, és nincsenek indexeik az elemek eléréséhez.

Tehát hozzáférnie kell a készlethez annak módszerei és tulajdonságai, vagy for-in hurkok segítségével.

4. példa: Egy halmaz elemeinek elérése

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

A program futtatásakor a kimenet a következő lesz:

 de ab cd bc 

A fenti programban a val más sorrendben kapjuk meg, mint a halmaz elemeit, mert a halmazok a tömböktől eltérően rendezetlenek.

Hozzáférhet egy halmaz eleméhez, közvetlenül eltávolítva az értéket a készletből, az alábbiak szerint:

5. példa: Egy halmaz elemeihez való hozzáférés az remove () használatával

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

A program futtatásakor a kimenet a következő lesz:

 Opcionális ("cd") ("de", "ab", "bc") 

A fenti programban láthatja, hogy az eltávolítási módszer egy választható karakterláncot ad vissza. Ezért javasoljuk, hogy az alábbiak szerint végezzen opcionális kezelést. Ha többet szeretne megtudni az opciókról, látogasson el a Swift Optionals oldalra.

6. példa: Opcionális kezelés az eltávolításhoz ()

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

A program futtatásakor a kimenet a következő lesz:

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

Hogyan adhatunk új elemet egy készlethez?

A insert()Swift metódusával új elemet adhat a készlethez .

7. példa: Új elem hozzáadása az insert () használatával

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

A program futtatásakor a kimenet a következő lesz:

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

Hasonlóképpen használhatja a removeAllfüggvényt egy készlet kiürítésére is.

érdekes cikkek...