18 / 68

Map

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.


1. Goda Map yaratish

Go tilida map yaratish sintaksisi quyidagicha:

example.go
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.

Misol: Map yaratish va chop etish

example.go
package main

import "fmt"

func main() {
    // Map yaratamiz
    subjectMarks := map[string]float32{"Golang": 85, "Java": 80, "Python": 81}

    fmt.Println(subjectMarks)
}

Natija:

kod
map[Golang:85 Java:80 Python:81]

Shuningdek, xaritani var kalit so'zi yordamida ham e'lon qilish mumkin:

example.go
var subjectMarks = map[string]float32{"Golang": 85, "Java": 80, "Python": 81}

2. Kalit orqali qiymatga murojaat qilish

Mapdagi qiymatni olish uchun unga tegishli kalitni kvadrat qavs ichida ko'rsatish kifoya:

example.go
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:

kod
Sariq
Qizil

3. Map elementining qiymatini o'zgartirish

Mavjud element qiymatini o'zgartirish uchun o'sha kalitga to'g'ridan-to'g'ri yangi qiymat o'zlashtiriladi:

example.go
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:

kod
Boshlang'ich: map[AQSH:Nyu-York Nepal:Katmandu]
Yangilangan: map[AQSH:Vashington Nepal:Katmandu]

4. Mapga yangi element qo'shish

Mapga yangi element qo'shish uchun shunchaki mavjud bo'lmagan yangi kalit va unga mos qiymatni yozish kifoya:

example.go
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:

kod
Boshlang'ich: map[1:John 2:Lily]
Yangilangan: map[1:John 2:Lily 3:Robin 5:Julie]

5. Mapdan elementni o'chirish: delete()

Elementni o'chirish uchun Goning o'rnatilgan delete() funksiyasidan foydalaniladi:

example.go
delete(map_nomi, kalit)
example.go
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:

kod
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.


6. make() funksiyasi yordamida bo'sh Map yaratish

Agar boshida elementlari bo'lmagan bo'sh map yaratmoqchi bo'lsangiz, make() funksiyasidan foydalanish tavsiya etiladi:

example.go
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:

kod
map[1:Harry 2:Lilly 5:Hermione]

7. Map bo'ylab sikl aylanish (for range)

Map elementlarini aylanib chiqish uchun for range siklidan foydalaniladi.

Kalit va qiymatni birgalikda olish:

example.go
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:

kod
2 ning kvadrati 4 ga teng
3 ning kvadrati 9 ga teng
4 ning kvadrati 16 ga teng
5 ning kvadrati 25 ga teng

Faqat kalitlarni olish:

Agar faqat kalitlar kerak bo'lsa, ikkinchi o'zgaruvchini yozmaslik kifoya:

example.go
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:

Faqat qiymatlarni olish uchun kalit o'rniga bo'sh identifikator _ qo'yiladi:

example.go
package main

import "fmt"

func main() {
    places := map[string]string{
        "Nepal":     "Katmandu",
        "AQSH":      "Vashington",
        "Norvegiya": "Oslo",
    }

    for _, capital := range places {
        fmt.Println(capital)
    }
}

Natija:

kod
Katmandu
Vashington
Oslo

[!TIP] Go tilida e'lon qilingan har bir o'zgaruvchi ishlatilishi shart. Agar for country, capital := range places deb yozib, country dan foydalanmasangiz, kompilyator xatolik beradi. Shuning uchun foydalanilmaydigan o'zgaruvchilar o'rniga doimo _ qo'llaniladi.