Published on

Swift-da Dictionary’lardan qanday foydalanish kerak

Authors

Hammaga yana xush kelibsiz!

Hammaga xush kelibsiz, mening ismim Nik, bu “Swiftful Thinking”. O‘tgan videoda arraylar va setlarni ko‘rdik. Bu videoda esa dictionarylarni o‘rganamiz – bu yana bir to‘plam turi, ko‘p ma’lumotni birlashtirishning boshqa usuli. Dictionary’lar array’lardan biroz farqli ishlaydi va turli holatlarda qo‘llaniladi. Ushbu qisqa kirish videosida iloji boricha ko‘proq misollar keltiraman.

Yuqori darajadagi farqlar:

  • Dictionary’lar indekslar emas, kalitlar (keys) asosida ishlaydi.
  • Array’da indekslar (0, 1, 2, 3) bo‘lsa, dictionary’da kalitlar bor – bu haqiqiy lug‘atga o‘xshaydi: kalit so‘zni qidirasiz va uning qiymatini (ta’rifini) olasiz.
  • Dictionary’da kalitni qidirib, qiymatni olish juda tez – dasturiy ta’minotda ma’lumotga kirishning eng tezkor usullaridan biri.

Array’lar dictionary’larga qaraganda ko‘proq ishlatiladi, chunki ular tartibli – ekranda ma’lumotni ma’lum tartibda ko‘rsatish uchun muhim. Dictionary’lar esa tartibsiz, lekin xavfsizroq – array’da chegaradan tashqari indeksni chaqirsak ilova yiqiladi, dictionary’da esa bunday muammo yo‘q. Keling, kodga o‘tamiz va dictionary yaratamiz!


Yana xush kelibsiz!

Hammaga xush kelibsiz, mening ismim Nik, bu “Swiftful Thinking”. Pleylistning oxiriga yaqinlashdik. O‘tgan videoda array’lar va ozgina set’larni ko‘rdik. Bu videoda dictionary’larga e’tibor qaratamiz – bu ham ma’lumotlar to‘plami.

Yangi fayl yarating: Navigator-da o‘ng tugma bilan bosing, yangi Playground sahifasini yarating va uni “Dictionaries” deb nomlang.


Fon

O‘tgan videodan kod:

var finalFruits: [String] = ["Apple", "Orange", "Banana", "Apple"]
print(finalFruits)  // ["Apple", "Orange", "Banana", "Apple"]

var fruitsSet: Set<String> = ["Apple", "Orange", "Banana", "Apple"]
print(fruitsSet)    // ["Orange", "Banana", "Apple"] - tartibsiz, takrorlanmaydi

  • Array: Tartibli, takroriy elementlarga ruxsat beradi.
  • Set: Tartibsiz, unikal elementlar.

Dictionary’lar set’larga yaqin – tartibsiz, lekin kalit-qiymat juftliklari bilan ishlaydi. Kalitlar takrorlanmaydi, qiymatlar esa takrorlanishi mumkin.


Dictionary’lar

let myFirstDictionary: [String: Bool] = [
    "Apple": true,
    "Orange": false
]

  • [String: Bool] – dictionary sintaksisi: kalit String, qiymat Bool.
  • Kalit: “Apple”, “Orange”.
  • Qiymat: true, false.

Kalit orqali qiymat olish

let item = myFirstDictionary["Orange"]  // false (optional)
print(item)  // false

  • Array’da finalFruits[1] indeks bilan chaqirsak, dictionary’da kalit bilan chaqiramiz: ["Orange"].
  • Qiymat optional – kalit mavjud bo‘lmasa nil qaytadi.

Xavfsiz kirish

let missingItem = myFirstDictionary["Banana"]  // nil
print(missingItem)  // nil

  • Array’da mavjud bo‘lmagan indeks (masalan, [10]) ilovani yiqitsa, dictionary’da kalit topilmasa nil qaytadi – xavfsiz.

Boshqa misol

var anotherDictionary: [Int: String] = [
    0: "Apple",
    176: "Banana"
]

let item2 = anotherDictionary[176]  // "Banana"
let item3 = anotherDictionary[86]   // nil

  • Kalit sifatida Int ishlatdik – lekin bu odatiy emas, ko‘pincha String ishlatiladi.

String kalit bilan:

let dict: [String: String] = [
    "abc": "Apple",
    "def": "Banana",
    "xyz": "Apple"
]
let value = dict["abc"]  // "Apple"

  • Kalitlar takrorlanmaydi, qiymatlar esa takrorlanishi mumkin.

Kalitlarning o‘ziga xosligi

let invalidDict: [String: String] = [
    "abc": "Apple",
    "abc": "Mango"  // Xato - bir xil kalit
]

  • Kalitlar unikal bo‘lishi kerak, aks holda xato.

Element qo‘shish va o‘chirish

Qo‘shish

anotherDictionary["xyz"] = "Mango"
print(anotherDictionary)  // [0: "Apple", 176: "Banana", "xyz": "Mango"]

  • Kalit-qiymath juftligini qo‘shish – tartib muhim emas.

O‘chirish

anotherDictionary.removeValue(forKey: 176)
print(anotherDictionary)  // [0: "Apple", "xyz": "Mango"]

  • removeValue(forKey:) – kalit orqali qiymatni o‘chiradi.

Tartibsizlik

Dictionary tartibsiz – kalitlar alifbo tartibida yoki yozilgan tartibda chiqmaydi.


Array vs Dictionary

Array:

  • Tartibli – ekranda ma’lumotni tartibda ko‘rsatish uchun ideal (masalan, restoranlar ro‘yxati).
  • Indekslar mavjud – xavfli, chegaradan tashqari kirish ilovani yiqitadi.

Dictionary:

  • Tartibsiz – tartib muhim bo‘lmasa ishlatiladi.
  • Kalitlar bilan ishlaydi – tezkor, xavfsiz (optional qaytadi).
  • Katta ma’lumotlar uchun, har bir elementning o‘ziga xos kaliti bo‘lsa (masalan, ID).

Maxsus tur bilan dictionary

struct PostModel {
    let id: String
    let title: String
    let likeCount: Int
}

var postArray: [PostModel] = [
    PostModel(id: "abc123", title: "Post 1", likeCount: 5),
    PostModel(id: "def678", title: "Post 2", likeCount: 10),
    PostModel(id: "xyz987", title: "Post 3", likeCount: 15)
]

var postDict: [String: PostModel] = [
    "abc123": PostModel(id: "abc123", title: "Post 1", likeCount: 5),
    "def678": PostModel(id: "def678", title: "Post 2", likeCount: 10),
    "xyz987": PostModel(id: "xyz987", title: "Post 3", likeCount: 15)
]

let myNewItem = postDict["def678"]
print(myNewItem?.title)  // "Post 2"

  • Array: Tartibli ro‘yxat – indeks bilan kirish.
  • Dictionary: Kalit (ID) bilan tezkor kirish.

Xulosa

Array va dictionary’lar turli holatlarda ishlatiladi – biri yaxshiroq deb ayta olmaymiz, har birining o‘z “super kuchi” bor:

  • Array: Tartibli, indeksli.
  • Dictionary: Tartibsiz, kalitli, tezkor va xavfsiz.

Keyingi videoda for looplarni ko‘ramiz – array, set va dictionary’dagi elementlarni qanday aylanib chiqish va ularga harakat qilishni (masalan, likeCount’ni o‘zgartirish) o‘rganamiz.

Men Nikman, bu “Swiftful Thinking”, keyingi videoda ko‘rishguncha!

Buy mea coffee