Golangda map ma'lumot turi
Goda kalit-qiymatli map deb nomlangan yana bir muhim ma'lumot turi mavjud.
Kalit - bu qiymatni olish uchun foydalanadigan ob'ekt. Kalit va qiymat berilgan holda siz qiymatni
map obyektida saqlashingiz mumkin. Qiymat saqlanganidan so'ng, uning kaliti yordamida uni olishingiz mumkin.
mapham to'plam ma'lumot turi hisoblanadi, ya'ni bitta o'zgaruvchida bir qancha qiymatlarini saqlash mumkin.
map tartiblanmagan va oʻzgaruvchan to'plam hisoblanadi, u dublikatlarga ruxsat bermaydi.
mapning uzunligi uning elementlari soni hisoblanadi, uzunligini len() funksiyasidan foydalanib aniqlash mumkin.
mapning dastlabki qiymati nilga teng.
mapni e'lon qilish var va := bilan
var va := bilan
var a = map[KeyType]ValueType{key1:value1, key2:value2,...}
b := map[KeyType]ValueType{key1:value1, key2:value2,...}
Misol
package main
import ("fmt")
func main() {
var a = map[string]string{"ism": "Sardor", "manzil": "Toshkent", "tugilgan_yili": "1999"}
b := map[string]string{"ism": "Sardor", "manzil": "Toshkent", "tugilgan_yili": "1999"}
fmt.Printf("a\t%v\n", a)
fmt.Printf("b\t%v\n", b)
}
Natija:
a map[ism:Sardor manzil:Toshkent tugilgan_yili:1999]
b map[ism:Sardor manzil:Toshkent tugilgan_yili:1999]
mapni e'lon qilish make() funksiyasi bilan
Misol:
package main
import ("fmt")
func main() {
var a = make(map[string]string)
a["ism"] = "Sardor"
a["manzil"] = "Toshkent"
a["tugilgan_yili"] = "1999"
b := make(map[string]string)
b["ism"] = "Sardor"
b["manzil"] = "Toshkent"
b["tugilgan_yili"] = "1999"
fmt.Printf("a\t%v\n", a)
fmt.Printf("b\t%v\n", b)
}
Natija:
a map[ism:Sardor manzil:Toshkent tugilgan_yili:1999]
b map[ism:Sardor manzil:Toshkent tugilgan_yili:1999]
bo'sh map e'lon qilish
Info
make() funksiyasi bo'sh map e'lon qilish uchun to'g'ri yo'l hisoblanadi.
Misol:
package main
import ("fmt")
func main() {
var a = make(map[string]string)
var b map[string]string
fmt.Println(a)
fmt.Println(b)
fmt.Println(a == nil)
fmt.Println(b == nil)
}
Natija:
Info
make() bilan map e'lon qilinsa bo'sh map hosil bo'ladi nil bo'lmaydi, agar var b map[type]type ko'rinishida
e'lon qilishda map e'lon qilinadi lekin xotira ajratilmaydi nil bo'ladi. nilga teng bo'lgan map ga qiymat berib bo'lmaydi
panic: assignment to entry in nil map xatoligi sodir bo'ladi.
map elementlariga murojaat qilish
Misol
package main
import ("fmt")
func main() {
var a = make(map[string]string)
a["ism"] = "Sardor"
fmt.Println(a["ism"])
}
Natija:
map elementini o'zgartirish
Misol:
package main
import ("fmt")
func main() {
var a = make(map[string]string)
a["ism"] = "Sardor"
fmt.Println(a["ism"])
a["ism"] = "Elbek"
fmt.Println(a["ism"])
}
Natija:
mapdan element o'chirish
Misol:
package main
import ("fmt")
func main() {
var a = make(map[string]string)
a["ism"] = "Sardor"
delete(a, "ism")
fmt.Println(a["ism"])
}
Natija:
Element mavjudligini tekshirish
Misol;
package main
import ("fmt")
func main() {
var a = make(map[string]string)
a["ism"] = "Sardor"
qiymat, element_bormi := a["ism"]
fmt.Println(qiymat, element_bormi)
}
Natija:
Agar qiymat kerak bo'lmasa, ammo key mavjud yoki yo'q ekanini aniqlash kerak bo'lsa quyidagicha tekshirish mumkin.
package main
import ("fmt")
func main() {
var a = make(map[string]string)
a["ism"] = "Sardor"
_, element_bormi := a["ism"]
fmt.Println(qiymat, element_bormi)
}
maplar xotira manzillari
map xotirada o'zgaruvchilarni emas, xotirada joylashgan ma'lumotlarga manzillarni saqlaydi. Bu reference type
tushunchasining asosi hisoblanadi. Agar map boshqa o‘zgaruvchiga o'tkazilsa, bu faqat havola (pointer) o'tadi.
package main
import ("fmt")
func main() {
var a = make(map[string]string)
a["ism"] = "Sardor"
b := a
fmt.Println(a)
fmt.Println(b)
b["ism"] = "Elbek"
fmt.Println("=========")
fmt.Println(a)
fmt.Println(b)
}
Natija:
b va a larda bir xil xotira maziliga bo'g'langan shu sabab birida ma'lumot o'zgarsa ikkinchisida ham o'zgaradi.
map va takrorlash operatori
map ustida takrorlash operatorini range bilan ishlatishingiz mumkin.
Misol
package main
import ("fmt")
func main() {
var a = map[string]string{"ism": "Sardor", "manzil": "Toshkent", "tugilgan_yili": "1999"}
for key, value := range a {
fmt.Println(key, value)
}
}
Natija: