Published on

Swift-da Array va Set-lardan qanday foydalanish kerak

Authors

Hammaga qaytib xush kelibsiz! Bu pleylist davomiy — har bir video oldingilari ustiga quriladi. Shu paytgacha String, Boolean, Tuple, Struct, Enum, Class va Access Control-ni o'rgandik. Qolgan taxminan besh video ancha oson va qiziqarliroq bo'ladi — biz yaratgan turlardagi ma'lumotlarni haqiqiy ilova stsenariylarida ishlatishni ko'rib chiqamiz.

Bu videoda Array — ya'ni to'plam (massiv) va Set — o'ziga xos to'plam turlarini o'rganamiz. Array deyarli har bir ekranda ishlatiladi, shuning uchun uni yaxshi tushunish juda muhim.


Array nima va nima uchun kerak?

Avval muammoni ko'raylik. Aytaylik, bizda bir nechta alohida qiymat bor:

var myTitle: String = "Salom dunyo"
var myTitle2: String = "Yana bir sarlavha"

Bu ikki qiymatni birgalikda uzatish uchun nima qilardik? Tuple ishlatishimiz mumkin:

func doSomething(value: (title1: String, title2: String)) { }
doSomething(value: (myTitle, myTitle2))

Yoki Struct yaratishimiz mumkin:

struct TitlesModel {
    let title1: String
    let title2: String
}

Lekin 100 ta sarlavha bo'lsa nima bo'ladi? Bularning hech biri kengaytirish uchun qulay emas. Mana shu muammoni Array hal qiladi.


Array yaratish

let apple = "Olma"
let orange = "Apelsin"

// 1-usul — eng keng tarqalgan
let fruits: [String] = ["Olma", "Apelsin"]

// 2-usul — o'zgaruvchilardan
let fruits2: [String] = [apple, orange]

// 3-usul — generic yozuv (ko'proq internetda uchraydi)
let fruits3: Array<String> = ["Olma", "Apelsin"]
// Uchinchi usul "generic" deb ataladi — hozircha birinchi usulni ishlating

Array faqat String bilan cheklanmaydi — istalgan tur bo'lishi mumkin:

let myBools: [Bool] = [true, false, true, true, false]

Array-ga qo'shimcha element kiritish va o'zgartirish

Array-ni o'zgartirish uchun let emas, var ishlatish kerak — chunki Array ham struct kabi Stack-da saqlanadi va o'zgartirish yangi nusxa yaratadi:

var fruitsArray: [String] = ["Olma", "Apelsin"]

// Oxiriga bitta element qo'shish
fruitsArray.append("Banan")

// Oxiriga bir nechta element qo'shish
fruitsArray.append(contentsOf: ["Banan", "Mango"])

// + operatori bilan qo'shish (kamroq ishlatiladigan usul)
fruitsArray = fruitsArray + ["Banan"]

Count va Index farqi

Bu juda muhim tushuncha:

var fruitsArray: [String] = ["Olma", "Apelsin", "Banan", "Mango"]

// Count — oddiy hisoblash kabi 1 dan boshlanadi
let count = fruitsArray.count
// count = 4

// Index — 0 dan boshlanadi
// Olma  → index 0
// Apelsin → index 1
// Banan  → index 2
// Mango  → index 3

let firstIndex = fruitsArray.indices.first  // 0
let lastIndex = fruitsArray.indices.last    // 3

// count = 4, lastIndex = 3
// Count doim lastIndex + 1 ga teng

Array elementlariga murojaat qilish (Subscript)

var fruitsArray: [String] = ["Olma", "Apelsin", "Banan", "Mango"]

// Birinchi va oxirgi element — Optional qaytaradi
let firstItem = fruitsArray.first   // Optional("Olma")
let lastItem = fruitsArray.last     // Optional("Mango")

// first Optional bo'lganligi sababli — array bo'sh bo'lsa nil qaytaradi
// Shuning uchun if let bilan ochish kerak
if let firstItem = fruitsArray.first {
    print(firstItem) // "Olma"
}

// Aniq index bo'yicha murojaat — subscript
let itemAtIndex2 = fruitsArray[2]  // "Banan"
let itemAtIndex0 = fruitsArray[0]  // "Olma"
let itemAtIndex1 = fruitsArray[1]  // "Apelsin"

⚠️ Xavfli index murojaat — dastur ishdan chiqishi

Bu juda muhim ogohlantirishdir:

var fruitsArray: [String] = ["Olma", "Apelsin", "Banan", "Mango"]
// Oxirgi index = 3

// BU XAVFLI — dastur ishdan chiqadi (crash)!
let item = fruitsArray[4] // Index mavjud emas!

// Xavfsiz usul — avval index mavjudligini tekshirish
if fruitsArray.indices.contains(4) {
    let item = fruitsArray[4]
    print(item)
}

Index bo'yicha to'g'ridan-to'g'ri murojaat qilganda faqat o'sha index mavjudligiga to'liq ishonch hosil bo'lgandagina shunday qiling.


Element qo'shish — insert

append — oxiriga qo'shadi. insert — istalgan joyga qo'shadi:

var fruitsArray: [String] = ["Olma", "Apelsin", "Banan"]
// index:                        0        1         2

// Index 2 joyiga "Qovun" kiritish — Banan 3-indexga suriladi
fruitsArray.insert("Qovun", at: 2)
// Natija: ["Olma", "Apelsin", "Qovun", "Banan"]

// Bir vaqtda bir nechta element kiritish
fruitsArray.insert(contentsOf: ["Qovun", "Mandarin"], at: 2)
// Natija: ["Olma", "Apelsin", "Qovun", "Mandarin", "Banan"]

Element o'chirish — remove

var fruitsArray: [String] = ["Olma", "Apelsin", "Qovun", "Mandarin", "Banan"]
// index:                       0        1          2         3           4

// Aniq index bo'yicha o'chirish
fruitsArray.remove(at: 3) // "Mandarin" o'chadi
// Natija: ["Olma", "Apelsin", "Qovun", "Banan"]

// Xavfsiz o'chirish — avval index mavjudligini tekshirish
if fruitsArray.indices.contains(1) {
    fruitsArray.remove(at: 1)
}

// Hammasini o'chirish
fruitsArray.removeAll()

O'z turlaringizdan Array yaratish

Array faqat String yoki Bool emas — siz yaratgan Struct, Class, Enum-lardan ham Array tuzishingiz mumkin:

struct ProductModel {
    let title: String
    let price: Int
}

var myProducts: [ProductModel] = [
    ProductModel(title: "Mahsulot 1", price: 50),
    ProductModel(title: "Mahsulot 2", price: 120),
    ProductModel(title: "Mahsulot 3", price: 75),
    ProductModel(title: "Mahsulot 4", price: 200),
]

// Array-ni keraklicha kattalashtirish mumkin — chek yo'q

Bu haqiqiy ilovalarda eng ko'p ishlatiladigan usul. Masalan, bir ekranda 50 ta mahsulotni ko'rsatish uchun [ProductModel] array-dan foydalanamiz.


Set — noyob elementlar to'plami

Set Array-ga o'xshaydi, lekin ikkita asosiy farqi bor:

// Array — takroriy elementlarga ruxsat beradi
let finalFruits: [String] = ["Olma", "Apelsin", "Banan", "Olma"]
print(finalFruits)
// Chiqadi: ["Olma", "Apelsin", "Banan", "Olma"] — ikki "Olma" bor

// Set — takroriy elementlarni o'chiradi
var fruitsSet: Set<String> = ["Olma", "Apelsin", "Banan", "Olma"]
print(fruitsSet)
// Chiqadi: ["Apelsin", "Olma", "Banan"] — faqat bitta "Olma"
// Tartib ham o'zgargan — Set-da tartib yo'q!

Array va Set asosiy farqlari

XususiyatArraySet
TartibHa — index borYo'q — tartibsiz
Takroriy elementRuxsat beriladiRuxsat berilmaydi
Qo'llanilishJuda keng tarqalganKam uchraydi

Set-ni qachon ishlatish kerak? Elementlar noyob bo'lishi shart bo'lgan va tartib muhim bo'lmagan hollarda. Masalan, bir foydalanuvchi tanlab olgan kategoriyalar ro'yxati.


Xulosa

Array — bu Swift-da eng ko'p ishlatiladigan to'plam turi. Deyarli har bir ekranda biror Array bo'ladi. Keyingi videolarda Array-larni yana chuqurroq — filter qilish, saralash kabi amallar bilan ko'rib chiqamiz. Undan oldin esa Dictionary-ni o'rganamiz.

Rahmat, men Nick, bu Swiftful Thinking va keyingi videoda ko'rishguncha!

Buy mea coffee