Dart Lug’atlar (Maps)

Lug’at – elementi kalit va qiymat juftligiga ega bo’lgan obyekt. Oddiy qilib aytganda, til o’rganayotgan vaqtimizda turli lug’atlardan foydalanamiz. Bularda o’sha tildagi so’z va uning o’zbek tilidagi tavsifi berib o’tiladi. Masalan, language – til. Bunda language kalit va til esa kalitga tegishli qiymat uning tavsifi.

Dart dasturlash tilida Map sinfi elementlar to’plami lug’at tarzida ifodalash uchun qo’llaniladi. Element kalit va qiymati turli ma’lumot turlarida bo’lishi mumkin. Bir xil kalitga ega elementlar bo’lishi mumkin emas.

{} jingalak qavslar Map obyektini yaratish uchun ishlatiladi. Quyidagi tarzda yaratiladi :

  1. Map<kalit_malumot_turi, qiymat_malumot_turi> map_nomi = {};
  2. var map_nomi = <kalit_turi, qiymat_turi>{};
  3. var map_nomi = {};

Sintaksisni ko’radigan bo’lsak, 1- va 2-usulda kalit_turi, qiymat_turi uchun kerakli ma’lumot turini berib ketish lozim. Keyin faqat mana shu turdagi elementlarni qo’shish mumkin bo’ladi. 3-usul To’plamlar mavzusida aytib ketganimizdek, Set obyektini emas, balki Map obyektini yaratish uchun ishlatiladi.

Map<String, int> dict = {}; - bu dict nomli Map obyektida kalit turi String, qiymat turi esa int qilib belgilanmoqda.

Endi Map obyektini elementlari mavjud holatda yaratamiz. Buning uchun unga elementlar kalit : qiymat tarzida yoziladi va ular soni bir nechta bo’lsa, vergul bilan ajratib yoziladi ya’ni quyidagicha:

Map<int, String> map = {1:'bir', 2:'ikki', 3:'uch'};
Lug’at 3 ta kalitdan iborat: 1, 2, 3 va qiymatlar: bir, ikki, uch.
Lug’at obyekti tarkibini print funksiyasi orqali ko’rishimiz mumkin.
void main() {
Map<int, String> map = {1:'bir', 2:'ikki', 3:'uch'};
print(map);
}
>> {1: bir, 2: ikki, 3: uch}

Ro’yxatlar bilan tanishganimizda uning biror elementiga murojaat etish indeksi orqali bo’lar edi va indeks faqat butun son bo’lar edi. Hamda u avtomatik berib ketilardi. Map da esa shu indeks o’rnida boshqa ma’lumot turidagi qiymat bo’lishi mumkin. Shu orqali esa kerakli elementga murojaat eta olamiz va uni endi o’zimiz belgilaymiz. Ya’ni bunday:

void main() {
List<String> list = ['bir', 'ikki', 'uch'];
Map<int, String> map = {0:'bir', 1:'ikki', 2:'uch'};
}

Hozir bu koddagi ro’yxat va lug’at elementlarga murojaat etish bir xil bo’ladi.

Element kalitidan foydalanib, uning qiymatini olishimiz va o’zgartirishimiz mumkin:

void main() {
Map<int, String> sayt = {0:'uzbekdevs.uz', 1:'fayllar.org', 2:'arxiv.uz'};
var bir = sayt[1];
print(bir);

sayt[2] = 'xabar.uz';
print(sayt);
}
>> fayllar.org >> {0: uzbekdevs.uz, 1: firesoft.org, 2: xabar.uz}

Element qiymatini olish uchun uning kalitini kvadrat qavslar ichida bering: var bir = sayt[1];

Element qiymatini o’zgartirish uchun kerakli kalit orqali murojaat qilib, ‘=’ lik belgisi bilan unga yangi qiymat belgilang: sayt[2] = 'xabar.uz';

Lug’at xususiyatlari

Lug’at funksiyalari

Lug’atga yangi element qo’shish kvadrat qavslar ichida kalit va unga ‘=’ tenglik belgisi orqali mos qiymat tayinlash orqali bajariladi: map[4] = 'to\'rt'; - 4 kalit, to’rt esa qiymat.

void main() {
Map<int, String> map = {1:'bir', 2:'ikki', 3:'uch'};
print(map);
map[4] = 'to\'rt';
print(map);
}
>> {1: bir, 2: ikki, 3: uch} >> {1: bir, 2: ikki, 3: uch, 4: to'rt}

Funksiya orqali lug’at elementi qiymatini yangilash usuli mavjud. Bunda update() funksiyasi qo’llaniladi.

String update(
int key,
String Function(String) update
)
  • key – kalit
  • Function(String) update - qiymat
void main() {
Map<int, String> map = {1:'bir', 2:'ikki', 3:'uch'};
map.update(1, (value) => 'nol');
print(map);
}
>> {1: nol, 2: ikki, 3: uch}

Agarda mavjud bo’lmagan kalit berilsa, ushbu xatolikni ko’ramiz:

Lug’atning barcha elementlari qiymati tarkibini o’zgartirish uchun updateAll() funksiyasi ishlatiladi. Funksiya sintaksisi:

void updateAll(String Function(int, String) update)

Quyidagi misolda lug’at barcha elementlarining qiymatini katta harflarga o’tkazadi. Ya’ni bunda barcha elementlari birma-bir ko’rib chiqiladi:

void main() {
Map<int, String> map = {1:'bir', 2:'ikki', 3:'uch'};
map.updateAll((key, value) => value.toUpperCase());
print(map);
}
>> {1: BIR, 2: IKKI, 3: UCH}

Lug’at elementlarini ko’zdan kechirish uchun for in siklidan foydalanamiz. Biz bunda elementlarni, kalitlarni va qiymatlarni ko’ra olamiz. Lug’at obyektining quyidagi xususiyatlari qo’llaniladi:

  • entries – yozuvlar ya’ni elementlar deb ham tushunsak bo’ladi
  • keys - kalitlar
  • values - qiymatlar

Elementlarni ko’rib chiqish uchun:

void main() {
Map<int, String> map = {1:'bir', 2:'ikki', 3:'uch'};
for (var element in map.entries) {
print("${element.key} : ${element.value}");
}
}
>> 1 : bir >> 2 : ikki >> 3 : uch

Kalitlarni ko’rib chiqish usuli:

void main() {
Map<int, String> map = {1:'bir', 2:'ikki', 3:'uch'};
for (var key in map.keys) {
print(key);
}
}
>> 1 >> 2 >> 3

Qiymatlarni ko’rib chiqish uchun:

void main() {
Map<int, String> map = {1:'bir', 2:'ikki', 3:'uch'};
for (var value in map.values) {
print(value);
}
}
>> bir >> ikki >> uch

Bu xususiyatlar belgilanmasa mana bu kabi xatoga duch kelamiz:

Shu bilan bir qatorda forEach() funksiyasi bilan buni bajara olamiz:

void main() {
Map<int, String> map = {1:'bir', 2:'ikki', 3:'uch'};
map.forEach((key, value) => print("$key: $value"));
}
>> 1 : bir >> 2 : ikki >> 3 : uch

Bunda ikkita parametr key (kalit) va value (qiymat) ni oladi.