Go map’lar
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]
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]
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
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
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]
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]
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
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]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,
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,
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
