Published on

Swift-da Filter, Sort va Map

Authors

Hammaga xush kelibsiz, mening ismim Nik, bu “Swiftful Thinking”. Va’da qilganimdek, o‘tgan videoda to‘plamlarni qo‘lda aylanib chiqishni (loop) ko‘rdik – for item in collection yozib, har bir elementni qo‘lda aylandik.

Swift’da buni avtomatik qilish uchun qulay usullar ham bor – har safar qo‘lda loop yozish shart emas. Eng keng tarqalgan uchta usul:

  • Filtering – array’dan ma’lum shartga mos keladigan elementlarni filtr qilish.
  • Sorting – array’dagi elementlarni tartiblash (masalan, alifbo bo‘yicha).
  • Mapping – ma’lumot turini boshqasiga aylantirish (masalan, struct array’ini string array’iga).

Bu videoda ushbu uchta usulning metodlarini ko‘ramiz – ular ilova qurishda juda kuchli. Keyingi pleylist – SwiftUI Bootcamp – ekranlar qurishni o‘rgatadi, lekin unda dastlab bu usullarni ko‘p ishlatmaymiz. Shu bois hozir ularni har kuni ishlatmasangiz ham, “vositalar qutingizda” bo‘lishi uchun tanishamiz. Keling, kodga o‘tamiz – filtr qilamiz, tartiblaymiz va o‘zgartiramiz!


Yana xush kelibsiz!

Hammaga xush kelibsiz! Bu pleylistni deyarli yakunladik – xavotirlanmang, bu video dastlab rejalashtirilmagan edi, lekin qisqacha ko‘rib chiqishga arziydi. Chuqur kirmaymiz, chunki keyingi 50 videoda (kanalimda) bularni ishlatmaysiz. Bu haqda chuqurroq videolarim bor, lekin ular o‘rta darajali – hozir faqat yangi boshlovchilar uchun oddiy ko‘rinish beraman: filtering, sorting va mapping.

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


Ma’lumot modelini yaratish

struct DatabaseUser {
    let name: String
    let isPremium: Bool
    let order: Int
}

let allUsers: [DatabaseUser] = [
    DatabaseUser(name: "Nick", isPremium: true, order: 4),
    DatabaseUser(name: "Emily", isPremium: false, order: 1),
    DatabaseUser(name: "Samantha", isPremium: true, order: 3),
    DatabaseUser(name: "Joe", isPremium: true, order: 10000),
    DatabaseUser(name: "Chris", isPremium: false, order: 2)
]

  • DatabaseUser – foydalanuvchi modeli: ism, premium holati, tartib raqami.
  • allUsers – barcha foydalanuvchilar array’i.

Filter

Qo‘lda loop bilan

var allPremiumUsers: [DatabaseUser] = []
for user in allUsers {
    if user.isPremium {
        allPremiumUsers.append(user)
    }
}
print(allPremiumUsers)  // [Nick, Samantha, Joe]

  • Premium foydalanuvchilarni filtrlaydi.

filter metodi bilan

var allPremiumUsers: [DatabaseUser] = allUsers.filter { user in
    if user.isPremium {
        return true
    } else {
        return false
    }
}
print(allPremiumUsers)  // [Nick, Samantha, Joe]

  • filter – array’dan shartga mos elementlarni qaytaradi.
  • Ichida loop avtomatik ishlaydi – qo‘lda yozish shart emas.

Qisqartirish

var allPremiumUsers: [DatabaseUser] = allUsers.filter { user in
    user.isPremium
}

  • isPremiumBool, shuning uchun if va returnni qisqartirib, faqat shartni yozsak kifoya.

Shorthand sintaksis

var allPremiumUsers2: [DatabaseUser] = allUsers.filter { $0.isPremium }

  • $0 – loop’dagi elementni anglatadi (tuple’dagi 0 kabi).
  • Bir qatorli qulay yozuv – yangi boshlovchilar uchun murakkab ko‘rinishi mumkin, lekin bir xil ishlaydi.

Sort

var orderedUsers: [DatabaseUser] = allUsers.sorted { user1, user2 in
    if user1.order < user2.order {
        return true
    } else {
        return false
    }
}
print(orderedUsers)  // [Emily(order: 1), Chris(2), Samantha(3), Nick(4), Joe(10000)]

  • sorted – array’ni tartiblash.
  • user1 va user2 – har bir juftni taqqoslaydi, order bo‘yicha kichikdan kattaga tartiblaydi.

Qisqartirish

var orderedUsers: [DatabaseUser] = allUsers.sorted { user1, user2 in
    user1.order < user2.order
}

  • <Bool qaytaradi, if va return keraksiz.

Shorthand sintaksis

var orderedUsers2: [DatabaseUser] = allUsers.sorted { $0.order < $1.order }

  • $0, $1 – birinchi va ikkinchi elementlar.
  • Tuple’dagi 0 va 1ga o‘xshaydi (Tuple videosidan eslang).

Map

var userNames: [String] = allUsers.map { user in
    return user.name
}
print(userNames)  // ["Nick", "Emily", "Samantha", "Joe", "Chris"]

  • map – array turini o‘zgartiradi (DatabaseUser’dan String’ga).
  • Har bir elementning name xususiyatini oladi.

Shorthand sintaksis

var userNames2: [String] = allUsers.map { $0.name }

  • $0 – elementni qisqa yozish.

Xulosa

Bu videoda filtering, sorting va mappingni ko‘rdik – ular ilova qurishda juda kuchli vositalar. Qo‘lda loop yozish o‘rniga bu metodlardan foydalaning – bu samaraliroq.

SwiftUI Bootcamp’da dastlab bularni ko‘p ishlatmaymiz, lekin ularni bilish “vositalar qutingiz”ni boyitadi. Keyingi videoda bu pleylistni yakunlaymiz.

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

Buy mea coffee