Map (түлхүүр-утга)
Map бол түлхүүр-утга (key-value) хосуудыг хадгалдаг өгөгдлийн бүтэц юм. Жишээлбэл, хотуудын хүн амыг хадгалахад "Улаанбаатар → 1,500,000", "Дархан → 100,000" гэх мэтээр хадгалж болно. Түлхүүрээр хайж утгыг маш хурдан олох боломжтой.
Бусад хэлд dictionary (Python), object (JavaScript) гэж нэрлэгддэгтэй адил ойлголт юм.
Map үүсгэх
package main
import "fmt"
func main() {
// Хот → Хүн ам map
хүнАм := map[string]int{
"Улаанбаатар": 1500000,
"Дархан": 100000,
"Эрдэнэт": 90000,
}
fmt.Println(хүнАм)
fmt.Println("Улаанбаатарын хүн ам:", хүнАм["Улаанбаатар"])
}
Дэлгэцэнд:
map[Дархан:100000 Улаанбаатар:1500000 Эрдэнэт:90000]
Улаанбаатарын хүн ам: 1500000
map[string]int гэдэг нь "string түлхүүртэй, int утгатай map" гэсэн утгатай. Түлхүүр болон утгын төрөл хоёулаа дурын байж болно.
Map-ийн элементүүд хэвлэгдэх дараалал нь тогтмол биш — Go нь map-ийг санамсаргүй дарааллаар хэвлэдэг. Энэ нь хэвийн зүйл.
Элемент нэмэх, өөрчлөх, устгах
package main
import "fmt"
func main() {
онооны := make(map[string]int)
// Элемент нэмэх
онооны["Болд"] = 95
онооны["Анар"] = 88
онооны["Бат"] = 72
fmt.Println("Анарын оноо:", онооны["Анар"]) // 88
// Утга өөрчлөх
онооны["Бат"] = 80
fmt.Println("Батын шинэ оноо:", онооны["Бат"]) // 80
// Элемент устгах
delete(онооны, "Болд")
fmt.Println("Болд устгасны дараа:", онооны)
}
Дэлгэцэнд:
Анарын оноо: 88
Батын шинэ оноо: 80
Болд устгасны дараа: map[Анар:88 Бат:80]
make(map[string]int) нь хоосон map үүсгэнэ. delete(map, түлхүүр) нь тухайн түлхүүртэй элементийг устгана.
Түлхүүр байгаа эсэхийг шалгах
Map-с утга авахад тухайн түлхүүр байхгүй бол default утга (int бол 0, string бол "") буцаана. Тиймээс түлхүүр үнэхээр байгаа эсэхийг шалгах хэрэгтэй:
package main
import "fmt"
func main() {
нийслэлүүд := map[string]string{
"Монгол": "Улаанбаатар",
"Япон": "Токио",
"Солонгос": "Сөүл",
}
// Хоёр утга авах — утга болон "байгаа эсэх" тэмдэглэгээ
нийслэл, байна := нийслэлүүд["Монгол"]
if байна {
fmt.Println("Монголын нийслэл:", нийслэл)
}
// Байхгүй түлхүүр шалгах
_, байна = нийслэлүүд["Герман"]
if !байна {
fmt.Println("Герман map-д байхгүй")
}
}
Дэлгэцэнд:
Монголын нийслэл: Улаанбаатар
Герман map-д байхгүй
утга, байна := map[түлхүүр] гэж хоёр утга авбал байна нь true эсвэл false байна. Энэ нь Go-ийн стандарт хэв маяг юм.
Map дээр давтах
range ашиглан map-ийн бүх элементийг дамжиж болно:
package main
import "fmt"
func main() {
үнэнүүд := map[string]float64{
"Алт": 150000,
"Мөнгө": 2000,
"Зэс": 1200,
}
fmt.Println("Металлын үнэ (төгрөгөөр нэг гр):")
for металл, үнэ := range үнэнүүд {
fmt.Printf(" %s: %.0f₮
", металл, үнэ)
}
}
Дэлгэцэнд (дараалал өөр байж болно):
Металлын үнэ (төгрөгөөр нэг гр):
Алт: 150000₮
Мөнгө: 2000₮
Зэс: 1200₮
for металл, үнэ := range үнэнүүд нь map-ийн бүх түлхүүр-утга хосыг нэг нэгээр авна. Slice-тай range ашигласантай адил.
Дараагийн хичээлд:
Struct буюу өөрийн дур мэдэн төрөл үүсгэхийг судална. Struct нь хүн, бараа, захиалга гэх мэт бодит амьдралын объектуудыг хэлд илэрхийлэх хамгийн нийтлэг арга юм.