Go'da Map ma'lumot turi qanday ishlaydi?
sobes.tech AI
AIdan javob
Map — bu Go tilida "kalit-qiymat" juftlari to‘plami bo‘lib, tartibsiz to‘plamadir.
Xususiyatlar:
- Kalitlar solishtiriladigan ma'lumot turlaridan bo‘lishi kerak (sonlar, satrlar, booleanlar, ko‘rsatkichlar, kanallar, interfeyslar, agar dinamik tur solishtiriladigan bo‘lsa, va massivlar, agar ularning elementlari solishtiriladigan bo‘lsa). Slices, funksiyalar va boshqa maplar kalit sifatida ishlatilmasligi kerak.
- Qiymatlar har qanday ma'lumot turida bo‘lishi mumkin.
- Map — bu havola turi, ya'ni, map turidagi o‘zgaruvchi xotirada map ma'lumotlar tuzilmasiga ko‘rsatkichni o‘z ichiga oladi. Bir o‘zgaruvchi orqali mapga o‘zgartirishlar qilish, uni ko‘rsatuvchi boshqa o‘zgaruvchilarda ham ko‘rinadi.
- Map uchun nol qiymat
nil.nilmapga yozish mumkin emas; buni qilish panik bilan tugaydi. - Mapning o‘lchami dinamik ravishda o‘zgaradi, elementlar qo‘shilganda yoki o‘chirilib tashlanganda.
Ichki amalga oshirish: Go’dagi map hash jadvali (hash table) sifatida amalga oshiriladi. Har bir kalit hashlanadi, va hash natijasi bog‘langan qiymatning jadvaldagi joyini aniqlash uchun ishlatiladi.
// Map yaratish
m := make(map[string]int)
// Elementlar qo‘shish
m["bir"] = 1
m["ikki"] = 2
// Qiymat olish
value, ok := m["bir"] // value = 1, ok = true
value, ok = m["uch"] // value = 0 (int uchun nol qiymat), ok = false
// Elementni o‘chirish
delete(m, "ikki")
// Map bo‘ylab iteratsiya (tartib kafolatlanmagan)
for key, value := range m {
// ...
}
Maplarni solishtirish: Ikki map faqat ular bir xil ichki tuzilishga murojaat qilsa, teng hisoblanadi, ya'ni, map1 == map2 faqat map1 va map2 bir xil o‘zgaruvchi bo‘lsa. Mapning mazmunini == operatori bilan solishtirib bo‘lmaydi. Mazmunini solishtirish uchun, har ikkala map bo‘ylab iteratsiya qilish va ularning elementlarini solishtirish kerak.
Performans: Mapda kirish, qo‘shish va o‘chirish operatsiyalari o‘rtacha O(1) murakkablikka ega. Eng yomon holatda (masalan, ko‘p hash to‘qnashuvlari bo‘lsa) ular O(n) vaqt olishi mumkin.