Maps

...

SU

Go Maps

Maps

Maps ma'lumotlarni kalit:qiymat juftliklarida saqlash uchun ishlatiladi.

Har bir Map elementi kalit:qiymat juftligi bo'ladi.

Map tartibsiz va o'zgartiriladigan to'plam bo'lib, takrorlanishga ruxsat bermaydi.

Mapning uzunligi uning elementlari sonini bildiradi. Buni len() funksiyasi yordamida aniqlashingiz mumkin.

Mapning default qiymati nildir.

Maps asosiy hash jadvaliga havolalarni saqlaydi.

Go'da Mapsni yaratishning bir necha usullari mavjud.

Mapsni var va := yordamida yaratish

Sintaksis

var a = map[KeyType]ValueType{key1:value1, key2:value2, ...}
b := map[KeyType]ValueType{key1:value1, key2:value2, ...}

Misol

Bu misolda Go'da Mapsni qanday yaratishni ko'rsatadi. Koddagi va chiqishdagi tartibni kuzatib boring:

package main
import ("fmt")
 
func main() {
  var a = map[string]string{"brand": "Ford", "model": "Mustang", "year": "1964"}
  b := map[string]int{"Oslo": 1, "Bergen": 2, "Trondheim": 3, "Stavanger": 4}
 
  fmt.Printf("a\t%v\n", a)
  fmt.Printf("b\t%v\n", b)
}

Natija:

a   map[brand:Ford model:Mustang year:1964]
b   map[Bergen:2 Oslo:1 Stavanger:4 Trondheim:3]

Eslatma: Map elementlarining kodda aniqlangan tartibi saqlangan tartibdan farq qiladi. Ma'lumotlar Mapdan samarali ma'lumot olish uchun saqlanadi.

make() Funktsiyasi yordamida Mapsni Yaratish

Sintaksis

var a = make(map[KeyType]ValueType)
b := make(map[KeyType]ValueType)

Misol

Bu misolda make() funksiyasi yordamida Go'da Mapsni qanday yaratishni ko'rsatadi.

package main
import ("fmt")
 
func main() {
  var a = make(map[string]string) // Map hozircha bo'sh
  a["brand"] = "Ford"
  a["model"] = "Mustang"
  a["year"] = "1964"
                                 // a endi bo'sh emas
  b := make(map[string]int)
  b["Oslo"] = 1
  b["Bergen"] = 2
  b["Trondheim"] = 3
  b["Stavanger"] = 4
 
  fmt.Printf("a\t%v\n", a)
  fmt.Printf("b\t%v\n", b)
}

Natija:

a   map[brand:Ford model:Mustang year:1964]
b   map[Bergen:2 Oslo:1 Stavanger:4 Trondheim:3]

Bo'sh Map Yaratish

Bo'sh Mapni yaratishning ikkita usuli mavjud. Biri make() funksiyasidan foydalanish, ikkinchisi esa quyidagi sintaksisni ishlatish.

Sintaksis

var a map[KeyType]ValueType

Eslatma: Bo'sh Mapni yaratishning to'g'ri usuli make() funksiyasidan foydalanishdir. Agar bo'sh Mapni boshqa usulda yaratsangiz va unga yozsangiz, bu ishlash vaqtida xato yuzaga kelishiga olib keladi.

Misol

Bu misolda make() funksiyasi yordamida va undan foydalanmasdan bo'sh Mapni qanday e'lon qilish farqini ko'rsatadi.

package main
import ("fmt")
 
func main() {
  var a = make(map[string]string)
  var b map[string]string
 
  fmt.Println(a == nil)
  fmt.Println(b == nil)
}

Natija:

false
true

Ruxsat Etilgan Kalit Turlari

Map kaliti quyidagi ma'lumot turlaridan biri bo'lishi mumkin, ular uchun tenglik operatori (==) aniqlangan. Bular quyidagilarni o'z ichiga oladi:

  • Booleans
  • Raqamlar
  • Strings
  • Massivlar
  • Ko'rsatkichlar
  • Strukturalar
  • Interfaces (agar dinamik tur tenglikni qo'llab-quvvatlasa)

Noto'g'ri kalit turlari:

  • Slayslar
  • Maps
  • Funktsiyalar

Bu turlar noto'g'ri, chunki tenglik operatori (==) ular uchun aniqlanmagan.

Ruxsat Etilgan Qiymat Turlari

Map qiymatlari har qanday turda bo'lishi mumkin.

Map Elementlariga Kirish

Map elementlariga quyidagicha kirish mumkin:

Sintaksis

value = map_name[key]

Misol

package main
import ("fmt")
 
func main() {
  var a = make(map[string]string)
  a["brand"] = "Ford"
  a["model"] = "Mustang"
  a["year"] = "1964"
 
  fmt.Printf(a["brand"])
}

Natija:

Ford

Map Elementlarini Yangilash va Qo'shish

Elementlarni yangilash yoki qo'shish quyidagicha amalga oshiriladi:

Sintaksis

map_name[key] = value

Misol

Bu misolda Map elementlarini qanday yangilash va qo'shishni ko'rsatadi.

package main
import ("fmt")
 
func main() {
  var a = make(map[string]string)
  a["brand"] = "Ford"
  a["model"] = "Mustang"
  a["year"] = "1964"
 
  fmt.Println(a)
 
  a["year"] = "1970" // Elementni yangilash
  a["color"] = "red" // Elementni qo'shish
 
  fmt.Println(a)
}

Natija:

map[brand:Ford model:Mustang year:1964]
map[brand:Ford color:red model:Mustang year:1970]

Map Elementlarini O'chirish

Elementlarni o'chirish delete() funksiyasi yordamida amalga oshiriladi.

Sintaksis

delete(map_name, key)

Misol

package main
import ("fmt")
 
func main() {
  var a = make(map[string]string)
  a["brand"] = "Ford"
  a["model"] = "Mustang"
  a["year"] = "1964"
 
  fmt.Println(a)
 
  delete(a, "year")
 
  fmt.Println(a)
}

Natija:

map[brand:Ford model:Mustang year:1964]
map[brand:Ford model:Mustang]

Mapda Muayyan Elementlar Borligini Tekshirish

Mapda ma'lum bir kalit mavjudligini quyidagicha tekshirishingiz mumkin:

Sintaksis

val, ok := map_name[key]

Agar faqat ma'lum bir kalit mavjudligini tekshirmoqchi bo'lsangiz, qiymat o'rniga bo'sh identifikator (_) ishlatishingiz mumkin.

Misol

package main
import ("fmt")
 
func main() {
  var a = map[string]string{"brand": "Ford", "model": "Mustang", "year": "1964", "day":""}
 
  val1, ok1 := a["brand"] // Mavjud kalit va uning qiymatini tekshirish
  val2, ok2 := a["color"] // Mavjud bo'lmagan kalit va uning qiymatini tekshirish
  val3, ok3 := a["day"]   // Mavjud kalit va uning qiymatini tekshirish
  _, ok4 := a["model"]    // Faqat mavjud kalitni tekshirish va uning qiymatini emas
 
  fmt.Println(val1, ok1)
  fmt.Println(val2, ok2)
  fmt.Println(val3, ok3)
  fmt.Println(ok4)
}

Natija:

Ford true
 false
 true
true

Misolning Izohi

Bu misolda, Mapdagi turli kalitlarning mavjudligini tekshirdik.

"color" kaliti Mapda mavjud emas. Shuning uchun qiymat bo'sh satr ('').

ok2 o'zgaruvchisi kalit mavjud yoki mavjud emasligini aniqlash uchun ishlatiladi. "color" kalitining qiymati bo'sh bo'lganida ham, biz shu qiymatni olgan bo'lardik

. Bu val3 uchun ham shunday.

Maps Referensiyalar

Maps hash jadvallariga referensiyalardir.

Agar ikkita Map o'zgaruvchisi bir xil hash jadvaliga havola qilsa, bir o'zgaruvchining mazmunini o'zgartirish boshqa o'zgaruvchining mazmuniga ta'sir qiladi.

Misol

package main
import ("fmt")
 
func main() {
  var a = map[string]string{"brand": "Ford", "model": "Mustang", "year": "1964"}
  b := a
 
  fmt.Println(a)
  fmt.Println(b)
 
  b["year"] = "1970"
  fmt.Println("B'ga o'zgartirilgandan keyin:")
 
  fmt.Println(a)
  fmt.Println(b)
}

Natija:

map[brand:Ford model:Mustang year:1964]
map[brand:Ford model:Mustang year:1964]
B'ga o'zgartirilgandan keyin:
map[brand:Ford model:Mustang year:1970]
map[brand:Ford model:Mustang year:1970]

Maps Bo'ylab Iteratsiya

Map elementlarini iteratsiya qilish uchun range operatoridan foydalanishingiz mumkin.

Misol

Bu misolda Map elementlarini qanday iteratsiya qilishni ko'rsatadi. Chiqishdagi elementlarning tartibiga e'tibor bering.

package main
import ("fmt")
 
func main() {
  a := map[string]int{"one": 1, "two": 2, "three": 3, "four": 4}
 
  for k, v := range a {
    fmt.Printf("%v : %v, ", k, v)
  }
}

Natija:

two : 2, three : 3, four : 4, one : 1,

Maps Bo'ylab Maxsus Tartibda Iteratsiya

Maps tartibsiz ma'lumot tuzilmalaridir. Agar siz Mapni maxsus tartibda iteratsiya qilishni xohlasangiz, maxsus tartibni belgilovchi qo'shimcha ma'lumot tuzilmasi kerak bo'ladi.

Misol

package main
import ("fmt")
 
func main() {
  a := map[string]int{"one": 1, "two": 2, "three": 3, "four": 4}
 
  var b []string             // tartibni belgilash
  b = append(b, "one", "two", "three", "four")
 
  for k, v := range a {        // tartibsiz iteratsiya
    fmt.Printf("%v : %v, ", k, v)
  }
 
  fmt.Println()
 
  for _, element := range b {  // belgilangan tartibda iteratsiya
    fmt.Printf("%v : %v, ", element, a[element])
  }
}

Natija:

two : 2, three : 3, four : 4, one : 1,
one : 1, two : 2, three : 3, four : 4,

Ushbu sahifada

GitHubda tahrirlash