Go map’lar


ULASHISH

Go map’lar

Map’lar ma’lumot qiymatlarini kalit:qiymat (key:value) juftliklarida saqlash uchun ishlatiladi.

Map’dagi har bir element kalit:qiymat juftligidan iborat.

Map — tartiblanmagan va o‘zgaruvchan to‘plam bo‘lib, takroriy elementlarga ruxsat bermaydi.

Map uzunligi — undagi elementlar soni. Uni len() funksiyasi yordamida aniqlashingiz mumkin.

Map’ning standart qiymati — nil.

Map’lar asosiy (underlying) hash jadvalga havolalarni saqlaydi.

Go tilida map yaratishning bir nechta usuli bor.


var va := yordamida map yaratish

Sintaksis

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

Misol

Ushbu misolda Go tilida map’larni qanday yaratish ko‘rsatilgan. Koddagi va natijadagi tartibga e’tibor bering

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]
O‘zingiz sinab ko‘ring »

Eslatma: Kodda aniqlangan map elementlarining tartibi ularning saqlanish tartibidan farq qiladi. Ma’lumotlar map’dan samarali olinishi uchun maxsus tarzda saqlanadi.



make() funksiyasi yordamida map yaratish:

Sintaksis

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

Misol

Ushbu misolda Go tilida make() funksiyasi yordamida map’larni qanday yaratish ko‘rsatilgan.

package main import "fmt" func main() {   var a = make(map[string]string) // The map is empty now   a["brand"] = "Ford"   a["model"] = "Mustang"   a["year"] = "1964"                                  // a is no longer empty   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]
O‘zingiz sinab ko‘ring »

Bo‘sh map yaratish

Bo‘sh map yaratishning ikki usuli bor. Biri — make() funksiyasidan foydalanish, ikkinchisi — quyidagi sintaksisdan foydalanish.

Sintaksis

var a map[KeyType]ValueType

Eslatma: Bo‘sh map yaratishning to‘g‘ri usuli — make() funksiyasi. Agar bo‘sh map’ni boshqa usulda yaratib, unga yozsangiz, bajarilish vaqtida panic (runtime panic) yuzaga keladi.

Misol

Ushbu misolda bo‘sh map’ni make() funksiyasi bilan va usiz e’lon qilish o‘rtasidagi farq ko‘rsatilgan.

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
O‘zingiz sinab ko‘ring »

Ruxsat etilgan kalit tiplari

Map kaliti tenglik operatori (==) aniqlangan istalgan ma’lumot tipida bo‘lishi mumkin. Ularga quyidagilar kiradi:

  • Boolean qiymatlar
  • Sonlar
  • Stringlar
  • Massivlar
  • Ko‘rsatkichlar (pointers)
  • Struct’lar
  • Interfeyslar (agar dinamik tip tenglikni qo‘llab-quvvatlasa)

Yaroqsiz kalit tiplari:

  • Slice’lar
  • Map’lar
  • Funksiyalar

Bu tiplar yaroqsiz, chunki ular uchun tenglik operatori (==) aniqlanmagan.


Ruxsat etilgan qiymat tiplari

Map qiymatlari istalgan tipda bo‘lishi mumkin.


Map elementlariga murojaat qilish

Map elementlariga quyidagicha murojaat qilishingiz 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
O‘zingiz sinab ko‘ring »

Map elementlarini yangilash va qo‘shish

Elementlarni yangilash yoki qo‘shish quyidagicha amalga oshiriladi:

Sintaksis

map_name[key] = value

Misol

Ushbu misolda map elementlarini qanday yangilash va qo‘shish ko‘rsatilgan.

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" // Updating an element   a["color"] = "red" // Adding an element   fmt.Println(a) }

Natija:

map[brand:Ford model:Mustang year:1964]
map[brand:Ford color:red model:Mustang year:1970]
O‘zingiz sinab ko‘ring »

Map’dan elementni 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]
O‘zingiz sinab ko‘ring »

Map’da ma’lum elementlar borligini tekshirish

Map’da ma’lum bir kalit mavjudligini quyidagicha tekshirishingiz mumkin:

Sintaksis

val, ok :=map_name[key]

Agar faqat ma’lum bir kalit mavjudligini tekshirmoqchi bo‘lsangiz, val o‘rniga bo‘sh identifikatordan (_) foydalanishingiz mumkin.

Misol

package main import "fmt" func main() {   var a = map[string]string{"brand": "Ford", "model": "Mustang", "year": "1964", "day":""}   val1, ok1 := a["brand"] // Checking for existing key and its value   val2, ok2 := a["color"] // Checking for non-existing key and its value   val3, ok3 := a["day"]   // Checking for existing key and its value   _, ok4 := a["model"]    // Only checking for existing key and not its value   fmt.Println(val1, ok1)   fmt.Println(val2, ok2)   fmt.Println(val3, ok3)   fmt.Println(ok4) }

Natija:

Ford true
 false
 true
true
O‘zingiz sinab ko‘ring »

Misol izohi

Ushbu misolda map’da turli kalitlar mavjudligini tekshirdik.

"color" kaliti map’da mavjud emas. Shuning uchun qiymat bo‘sh string ('') bo‘ladi.

ok2 o‘zgaruvchisi kalit mavjud yoki mavjud emasligini aniqlash uchun ishlatiladi. Chunki "color" kalitining qiymati bo‘sh bo‘lganida ham xuddi shu qiymatni olgan bo‘lardik. val3 uchun aynan shunday holat yuz bergan.


Map’lar — havolalar (references)

Map’lar hash jadvallarga havolalardir.

Agar ikkita map o‘zgaruvchisi bitta hash jadvalga havola qilsa, ulardan birining tarkibini o‘zgartirish ikkinchisining tarkibiga ham 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("After change to b:")   fmt.Println(a)   fmt.Println(b) }

Natija:

map[brand:Ford model:Mustang year:1964]
map[brand:Ford model:Mustang year:1964]
After change to b:
map[brand:Ford model:Mustang year:1970]
map[brand:Ford model:Mustang year:1970]
O‘zingiz sinab ko‘ring »

Map’lar bo‘ylab iteratsiya

Map’lar bo‘ylab iteratsiya qilish uchun range kalit so‘zidan foydalanishingiz mumkin.

Misol

Ushbu misolda map elementlarini qanday aylanib chiqish ko‘rsatilgan. Natijadagi elementlar 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,
O‘zingiz sinab ko‘ring »

Map’lar bo‘ylab ma’lum tartibda iteratsiya

Map’lar tartiblanmagan ma’lumotlar tuzilmalaridir. Agar map’ni ma’lum tartibda aylanib chiqish kerak bo‘lsa, shu tartibni belgilaydigan alohida ma’lumotlar tuzilmasiga ega bo‘lishingiz kerak.

Misol

package main import "fmt" func main() {   a := map[string]int{"one": 1, "two": 2, "three": 3, "four": 4}   var b []string             // defining the order   b = append(b, "one", "two", "three", "four")   for k, v := range a {        // loop with no order     fmt.Printf("%v : %v, ", k, v)   }   fmt.Println()   for _, element := range b {  // loop with the defined order     fmt.Printf("%v : %v, ", element, a[element])   } }

Natija:

two : 2, three : 3, four : 4, one : 1,
one : 1, two : 2, three : 3, four : 4,
O‘zingiz sinab ko‘ring »

W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!