Dart To’plamlar (Sets)

To’plam – o’zida bir xil qiymatga ega bo’lmagan elementlarni saqlovchi obyekt hisoblanadi. Ro’yxatlardan farqi:

  1. Doimo to’plam elementlari tartiblangan holatda bo’ladi. O’sish tartibida
  2. Bir xil qiymatli elementlar bo’lmaydi
  3. Indeks orqali murojaat qilish imkonsiz

Dart dasturlash tilida ham to’plamlar bilan ishlash uchun Set turidan foydalaniladi va quyidagi usullarda to’plam obyektini yaratish mumkin.

  • Set<to’plam_turi> to’plam_nomi = {}
  • var to’plam_nomi = <to’plam_turi>{}

{} – jingalak qavslar to’plamlarni ifodalash uchun ishlatiladi va uning turi ko’rsatib o’tilganda. Yuqoridagi 2 usul kabi.

Yodda tuting!

var to’plam_nomi = {} tarzida to’plam yaratish xato usul hisoblanadi. Bunday holatda to’plam obyekti emas, balki map obyekti yaratilgan bo’ladi. Bu haqida esa keyingi mavzuda bilib olasiz. Bu xatoni bartaraf etish usuli to’plamga hech bo’lmaganda bitta qiymat berib ketish.

void main() {
var set = {};
print(set.runtimeType);
}
>> _Map<dynamic, dynamic>
void main() {
var set = {‘uzbekcoder’};
print(set.runtimeType);
}
>> _Set<String>

Keling kompyuter va OT (Operatsion tizimlar) deb nomlangan to’plamlarni yaratib ko’raylik boshlanishiga berilgan usullar orqali.

void main() {
Set<String> kompyuter = {};
var OT = <String>{};
print(OT.runtimeType);
print(kompyuter.runtimeType);
}
>> _Set<String> >> _Set<String>

To’plamlarni yaratdik va ularning turini ko’rgan vaqtimizda Set va qaysi ma’lumot turida ekanligini ko’rsatmoqda.

Ro’yxat va to’plam o’rtasidagi ikkinchi farqni ko’rib o’tadigan bo’lsak. To’plam bir xil qiymatli elementlar takrorlanishiga ruxsat bermayabdi va ularni olib tashlamoqda.

void main() {
Set<int> set = {1, 2, 3, 4, 1, 2};
List<int> list = [1, 2, 3, 4, 1, 2];
print(list);
print(set);
}
>> [1, 2, 3, 4, 1, 2] >> {1, 2, 3, 4}

To’plam xususiyatlari

To’plam funksiyalari

Matematikada ham bilamizki, to’plamlar mavjud. To’plamlar ustida bajariluvchi quyidagi ishlar bor : birlashmasi (union), kesishmasi (intersection) va ayirmasi yoki farqi (difference) deb ham ataladi. Quyidagi rasmga qarab bular haqida bilib olishingiz mumkin.

Xuddi shu vazifalarni bajaruvchi to’plam funksiyalari ham mavjud.

Union ikki to’plam birlashmasini to’plam sifatida beradi. Doimgidek bir xil qiymatli elementlar yakka olinadi.

void main() {
Set<String> set = {'u', 'z', 'b', 'e', 'k'};
Set<String> belgi = {'d', 'e', 'v', 's'};

print(set.union(belgi));
}
>> {u, z, b, e, k, d, v, s}

Intersection ikkala to’plamda ham uchraydigan elementlarni to’plam sifatida qaytaradi.

void main() {
Set<String> set = {'u', 'z', 'b', 'e', 'k'};
Set<String> belgi = {'d', 'e', 'v', 's'};

print(set.intersection(belgi));
}
>> {e}

Difference birinchi to’plam farqini to’plam sifatida beradi. Ya’ni bunda birinchi to’plamda mavjud, ammo ikkinchi to’plamda uchramaydigan elementlar olinadi.

void main() {
Set<String> set = {'u', 'z', 'b', 'e', 'k'};
Set<String> belgi = {'d', 'e', 'v', 's'};

print(set.difference(belgi));
}
>> {u, z, b, k}

To’plam elementlarini sikl orqali yoki forEach funksiyasi orqali ko’rib chiqishimiz va ular ustida turli amallarni bajarishimiz mumkin. Sikl orqali for siklining for in shakli qo’llaniladi.

void main() {
Set<String> set = {'u', 'z', 'b', 'e', 'k', 'd', 'e', 'v', 's'};
for (var e in set) {
print(e);
}
}
>> u >> z >> b >> e >> k >> d >> v >> s

forEach funksiyasi orqali esa quyidagi ko’rinishda bo’ladi:

void main() {
Set<String> set = {'u', 'z', 'b', 'e', 'k', 'd', 'e', 'v', 's'};
set.forEach((element) {print(element);});
}
>> u >> z >> b >> e >> k >> d >> v >> s

Bunda ham to’plam har bir elementi olinadi va jingalak qavslar ichida berilgan vazifa bajariladi. Hozirda esa elementlar print funksiyasi orqali ekranga chiqarilmoqda yoki shunchaki funksiya nomining o’zini berish yetarkli: set.forEach(print); tarzida.

To’plamlarda indeks ishlatish imkoniyati cheklangani uchun ro’yxatlar kabi elementni indeks bo’yicha qo’sha olmaymiz.