Set Swift: Bagaimana Menggunakannya dan Mengapa? (Dengan Contoh)

Dalam tutorial ini, anda akan belajar mengenai set, membuat set, mengubahnya dan beberapa operasi biasa dalam set.

Dalam artikel Swift Arrays sebelumnya, kami belajar tentang membuat array yang dapat menyimpan banyak nilai dalam daftar yang disusun.

Tetapi, jika kita harus memastikan senarai dapat menyimpan nilai hanya sekali, kita menggunakan satu set di Swift.

Apa itu set?

Set hanyalah wadah yang dapat menyimpan banyak nilai jenis data dalam senarai yang tidak disusun dan memastikan elemen unik dalam wadah (iaitu setiap data muncul sekali sahaja).

Senarai yang tidak disusun bermaksud anda tidak akan mendapatkan elemen dalam urutan yang sama seperti yang anda tetapkan item dalam Set.

Kelebihan utama menggunakan Sets over array adalah ketika anda perlu memastikan bahawa item hanya muncul sekali dan ketika urutan item tidak penting.

Nilai yang disimpan dalam satu set mesti dicirikan . Ini bermaksud ia harus menyediakan harta hashValue. Ini penting kerana set tidak disusun dan menggunakan hashValue digunakan untuk mengakses elemen set.

Semua jenis asas Swift (seperti String, Int, Double, dan Bool) adalah hashable secara lalai dan boleh digunakan sebagai jenis nilai yang ditetapkan. Walau bagaimanapun, anda juga dapat membuat Jenis Hashable anda di Swift yang dapat disimpan dalam satu set.

Bagaimana cara menyatakan satu set di Swift?

Anda boleh membuat set kosong dengan menetapkan jenisnya sebagai Set diikuti dengan jenis Data yang dapat disimpannya.

Contoh 1: Menyatakan set kosong

 let emptyIntSet:Set = () print(emptyIntSet) 

ATAU

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

Semasa anda menjalankan program, outputnya adalah:

 ()

Dalam program di atas, kami telah menyatakan jenis kosongIntSet tetap Setyang dapat menyimpan pelbagai nilai bilangan bulat dan dimulakan dengan 0 nilai.

Oleh kerana, Swift adalah bahasa inferensi jenis, anda juga dapat membuat set secara langsung tanpa menentukan Jenis Data tetapi harus menginisialisasi dengan beberapa nilai sehingga penyusun dapat menyimpulkan jenisnya sebagai:

Contoh 2: Menyatakan satu set dengan beberapa nilai

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

Semasa anda menjalankan program, outputnya adalah:

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

Dalam program di atas, kami telah menyatakan beberapaIntSet tetap yang dapat menyimpan set Integer tanpa menentukan jenisnya secara eksplisit. Walau bagaimanapun, kita perlu menulis :Setsemasa menentukan pemboleh ubah, jika tidak, Swift akan membuat array untuk kita.

Sebagai tatasusunan, kami telah menginisialisasi set dengan nilai 1, 2, 3, 4, 5, 6, 7, 8, 9 menggunakan ()tanda kurung.

Seperti yang telah anda ketahui, ketika anda mencetak nilai di dalam set seperti itu print(someIntSet), anda akan mendapatkan hasilnya dalam urutan yang berbeda dari yang anda tetapkan item dalam set kerana menyimpan nilai tanpa susunan yang ditentukan. Oleh itu, setiap kali anda mengakses pesanan berubah.

Contoh 3: Menyatakan satu set dengan nilai pendua

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

Semasa anda menjalankan program, outputnya adalah:

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

Dalam program di atas, kami telah menentukan nilai pendua ab dalam set. Dan. ketika kita mencoba mengakses nilai di dalam set menggunakan print(someStrSet), nilai pendua secara automatik dikeluarkan dari set. Oleh itu, set menjamin elemen / nilai unik di dalamnya.

Anda juga boleh menyatakan satu set dengan jenis Hashable tersuai anda sendiri di Swift. Untuk mengetahui lebih lanjut, lawati Swift Hashable.

Bagaimana cara mengakses elemen set di Swift?

Anda tidak dapat mengakses elemen satu set menggunakan sintaks subskrip sebagai tatasusunan. Ini kerana set tidak disusun dan tidak mempunyai indeks untuk mengakses elemen.

Oleh itu, anda perlu mengakses set menggunakan kaedah dan sifatnya atau menggunakan gelung masuk.

Contoh 4: Mengakses elemen satu set

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

Semasa anda menjalankan program, outputnya adalah:

 de ab cd bc 

Dalam program di atas, kita mendapatkan val dalam urutan yang berbeza daripada elemen satu set kerana set tidak disusun tidak seperti tatasusunan.

Anda juga dapat mengakses elemen set secara langsung menghapus nilai dari set seperti di bawah:

Contoh 5: Mengakses elemen set menggunakan remove ()

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

Semasa anda menjalankan program, outputnya adalah:

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

Dalam program di atas, anda dapat melihat kaedah membuang mengembalikan rentetan pilihan. Oleh itu, anda disyorkan untuk melakukan pengendalian pilihan seperti di bawah. Untuk mengetahui lebih lanjut mengenai pilihan, lawati Swift Optionals.

Contoh 6: Pengendalian pilihan untuk mengeluarkan ()

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

Semasa anda menjalankan program, outputnya adalah:

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

Bagaimana cara menambah elemen baru dalam satu set?

Anda boleh menambahkan elemen baru ke satu set menggunakan insert()kaedah di Swift.

Contoh 7: Tambahkan elemen baru menggunakan sisipan ()

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

Semasa anda menjalankan program, outputnya adalah:

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

Begitu juga, anda juga boleh menggunakan removeAllfungsi untuk mengosongkan satu set.

Artikel menarik...