- Published on
Swiftda Hashable
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
Bilimingizni sinab ko'ring!
20 ta savol Β· ~20 daqiqa
Swiftda Hashable β bu obyektimizga hashValue beruvchi protocol. hashValue ikki instanceni solishtirish uchun ishlatiladi.
hashValue dan foydalanish uchun avval turni (struct, class va hokazo) Hashable protocoliga moslashtirish kerak. Masalan,
struct Employee: Hashable {
...
}
Bu yerda Employee structini Hashable protocoliga moslashtirdik.
Endi Employee dan instancelar yaratganimizda, protocol instancelarga hash qiymatlarini beradi.
Misol:
Bu yerda object1.hashValue va object2.hashValue mos ravishda object1 va object2 instancelari uchun hash qiymatlarini qaytaradi.
Hash qiymati β bu uzoq butun son bo'lib, siz ishlatayotgan tizimga qarab o'zgaradi, shuning uchun bir xil kod uchun boshqa qiymatlarni olishingiz mumkin.
Hashable protocol yordamida Instancelarni solishtirish
Yuqoridagi misolda Hashable protocoliga mos keladigan Employee nomli struct yaratdik.
Ikkita obyekt yaratdik: obj1 va obj2.
let obj1 = Employee(name: "Sabby", salary: 40000)
let obj2 = Employee(name: "Cathy", salary: 30000)
Bu yerda ikkala instance ham name va salary propertylari uchun turli qiymatlarga ega. Shuning uchun obj1 va obj2 uchun hash qiymatlari turlicha.
Xuddi shunday, yana ikkita obyekt yaratdik.
let obj3 = Employee(name: "Lanny", salary: 50000)
let obj4 = Employee(name: "Lanny", salary: 50000)
Bu safar obj3 va obj4 ning property qiymatlari bir xil, shuning uchun instancelar uchun bir xil hash qiymatlarini olamiz.
Hash funksiya va Combine
Yuqoridagi misolda structning barcha propertylarini solishtirib chiqdik.
Ammo ba'zan turning faqat ayrim propertylarini solishtirishni xohlashimiz mumkin. Bunday holatda tur ichida hash funksiyasidan foydalanishimiz mumkin. Masalan,
func hash(into hasher: inout Hasher) {
hasher.combine(name)
}
Bu yerda hash() funksiyasi solishtirishni xohlagan propertyni belgilash uchun hasher.combine() dan foydalanadi.
Hash funksiyadan foydalanish
Yuqoridagi misolda ikki instanceni salary propertysi asosida solishtirish uchun hash() funksiyasidan foydalandik:
func hash(into hasher: inout Hasher) {
hasher.combine(salary)
}
Bu yerda obj1 va obj2 ning salary si turlicha, shuning uchun turli hash qiymatlarini olamiz.
Agar hash() funksiyasi ichida name propertydan foydalansak, bir xil hash qiymatni olamiz. Buning sababi, ikkala obyektning name i bir xil.
Xulosa
Hashable protocoli:
- Obyektlarga hash qiymatlarini beradi
- Instancelarni samarali solishtirish imkonini beradi
hash()funksiyasi orqali ayrim propertylarni tanlash imkonini beradi- Dictionary kalitlari va Set elementlari uchun zarur
Hashable protocoli Swiftda ma'lumotlar tuzilmalarini samarali boshqarish uchun muhim vositadir.