Kalit-qiymat to'plami
Go dasturlash tilida map ma'lumotlar tuzilmasi elementlarni kalit/qiymat (key/value) juftliklari ko'rinishida saqlash uchun xizmat qiladi.
Bu yerda har bir kalit (key) unikal (takrorlanmas) bo'lib, xaritadagi (map) ma'lum bir qiymatni topish uchun identifikator vazifasini bajaradi.
Go tilida map yaratish sintaksisi quyidagicha:
subjectMarks := map[string]float32{"Golang": 85, "Java": 80, "Python": 81}
Bu yerda:
subjectMarks — map o'zgaruvchisining nomi.[string] — kalitlar satr (string) turida bo'lishini ko'rsatadi.float32 — qiymatlar haqiqiy son (float32) turida bo'lishini bildiradi.{"Golang", "Java", "Python"} — xaritadagi kalitlar.{85, 80, 81} — ushbu kalitlarga mos keluvchi qiymatlar.package main
import "fmt"
func main() {
// Map yaratamiz
subjectMarks := map[string]float32{"Golang": 85, "Java": 80, "Python": 81}
fmt.Println(subjectMarks)
}
Natija:
map[Golang:85 Java:80 Python:81]
Shuningdek, xaritani var kalit so'zi yordamida ham e'lon qilish mumkin:
var subjectMarks = map[string]float32{"Golang": 85, "Java": 80, "Python": 81}
Mapdagi qiymatni olish uchun unga tegishli kalitni kvadrat qavs ichida ko'rsatish kifoya:
package main
import "fmt"
func main() {
flowerColor := map[string]string{
"Sunflower": "Sariq",
"Jasmine": "Oq",
"Hibiscus": "Qizil",
}
// Sunflower kalitining qiymatini olamiz
fmt.Println(flowerColor["Sunflower"]) // Sariq
// Hibiscus kalitining qiymatini olamiz
fmt.Println(flowerColor["Hibiscus"]) // Qizil
}
Natija:
Sariq
Qizil
Mavjud element qiymatini o'zgartirish uchun o'sha kalitga to'g'ridan-to'g'ri yangi qiymat o'zlashtiriladi:
package main
import "fmt"
func main() {
capital := map[string]string{
"Nepal": "Katmandu",
"AQSH": "Nyu-York",
}
fmt.Println("Boshlang'ich:", capital)
// AQSH poytaxtini o'zgartiramiz
capital["AQSH"] = "Vashington"
fmt.Println("Yangilangan:", capital)
}
Natija:
Boshlang'ich: map[AQSH:Nyu-York Nepal:Katmandu]
Yangilangan: map[AQSH:Vashington Nepal:Katmandu]
Mapga yangi element qo'shish uchun shunchaki mavjud bo'lmagan yangi kalit va unga mos qiymatni yozish kifoya:
package main
import "fmt"
func main() {
students := map[int]string{1: "John", 2: "Lily"}
fmt.Println("Boshlang'ich:", students)
// 3 va 5 kalitlari bilan yangi elementlar qo'shamiz
students[3] = "Robin"
students[5] = "Julie"
fmt.Println("Yangilangan:", students)
}
Natija:
Boshlang'ich: map[1:John 2:Lily]
Yangilangan: map[1:John 2:Lily 3:Robin 5:Julie]
delete()Elementni o'chirish uchun Goning o'rnatilgan delete() funksiyasidan foydalaniladi:
delete(map_nomi, kalit)
package main
import "fmt"
func main() {
personAge := map[string]int{"Hermione": 21, "Harry": 20, "John": 25}
fmt.Println("Boshlang'ich:", personAge)
// "John" kalitli elementni o'chiramiz
delete(personAge, "John")
fmt.Println("Yangilangan:", personAge)
}
Natija:
Boshlang'ich: map[Harry:20 Hermione:21 John:25]
Yangilangan: map[Harry:20 Hermione:21]
[!NOTE] Agar
delete()funksiyasiga berilgan kalit xaritada mavjud bo'lmasa, funksiya hech qanday xatolik chiqarmaydi va shunchaki hech narsa bajarmaydi.
make() funksiyasi yordamida bo'sh Map yaratishAgar boshida elementlari bo'lmagan bo'sh map yaratmoqchi bo'lsangiz, make() funksiyasidan foydalanish tavsiya etiladi:
package main
import "fmt"
func main() {
// make() orqali bo'sh map yaratamiz
student := make(map[int]string)
// Elementlar qo'shamiz
student[1] = "Harry"
student[2] = "Lilly"
student[5] = "Hermione"
fmt.Println(student)
}
Natija:
map[1:Harry 2:Lilly 5:Hermione]
for range)Map elementlarini aylanib chiqish uchun for range siklidan foydalaniladi.
package main
import "fmt"
func main() {
squaredNumber := map[int]int{2: 4, 3: 9, 4: 16, 5: 25}
for number, squared := range squaredNumber {
fmt.Printf("%d ning kvadrati %d ga teng\n", number, squared)
}
}
Natija:
2 ning kvadrati 4 ga teng
3 ning kvadrati 9 ga teng
4 ning kvadrati 16 ga teng
5 ning kvadrati 25 ga teng
Agar faqat kalitlar kerak bo'lsa, ikkinchi o'zgaruvchini yozmaslik kifoya:
package main
import "fmt"
func main() {
places := map[string]string{
"Nepal": "Katmandu",
"AQSH": "Vashington",
"Norvegiya": "Oslo",
}
for country := range places {
fmt.Println(country)
}
}
Faqat qiymatlarni olish uchun kalit o'rniga bo'sh identifikator _ qo'yiladi:
package main
import "fmt"
func main() {
places := map[string]string{
"Nepal": "Katmandu",
"AQSH": "Vashington",
"Norvegiya": "Oslo",
}
for _, capital := range places {
fmt.Println(capital)
}
}
Natija:
Katmandu
Vashington
Oslo
[!TIP] Go tilida e'lon qilingan har bir o'zgaruvchi ishlatilishi shart. Agar
for country, capital := range placesdeb yozib,countrydan foydalanmasangiz, kompilyator xatolik beradi. Shuning uchun foydalanilmaydigan o'zgaruvchilar o'rniga doimo_qo'llaniladi.