← Danh sách bài học
Bài 9/20
🗺️ Bài 9: Map (Dictionary)
🎯 Mục tiêu:
- Hiểu Map là gì (key-value)
- Tạo map với make và literal
- CRUD: thêm, đọc, sửa, xóa
- Kiểm tra key tồn tại
1. Map Là Gì?
Map lưu trữ dữ liệu theo cặp key-value (khóa-giá trị). Giống dictionary trong Python hoặc object trong JavaScript.
// Cú pháp: map[KeyType]ValueType
// Tạo map với make
ages := make(map[string]int)
ages["Minh"] = 25
ages["Lan"] = 22
// Tạo map với literal
colors := map[string]string{
"red": "#FF0000",
"green": "#00FF00",
"blue": "#0000FF",
}
fmt.Println(colors["red"]) // #FF0000
2. Thêm, Đọc, Sửa Phần Tử
scores := make(map[string]int)
// Thêm
scores["Math"] = 90
scores["English"] = 85
// Đọc
fmt.Println(scores["Math"]) // 90
// Sửa
scores["Math"] = 95
fmt.Println(scores["Math"]) // 95
3. Kiểm Tra Key Tồn Tại
scores := map[string]int{"Math": 90}
// Đọc key không tồn tại → zero value
fmt.Println(scores["Physics"]) // 0
// Kiểm tra key có tồn tại không
value, exists := scores["Math"]
if exists {
fmt.Println("Math score:", value)
}
// Cách viết gọn
if score, ok := scores["English"]; ok {
fmt.Println("English:", score)
} else {
fmt.Println("English không tồn tại")
}
💡 ok idiom:
value, ok := map[key] - ok là true nếu key tồn tại
4. Xóa Phần Tử
scores := map[string]int{
"Math": 90,
"English": 85,
}
delete(scores, "English") // Xóa key "English"
fmt.Println(scores) // map[Math:90]
// Xóa key không tồn tại → không lỗi
delete(scores, "Physics")
5. Duyệt Map với range
fruits := map[string]int{
"Apple": 5,
"Orange": 3,
"Banana": 7,
}
for key, value := range fruits {
fmt.Printf("%s: %d\n", key, value)
}
// Chỉ lấy keys
for key := range fruits {
fmt.Println(key)
}
⚠️ Lưu ý: Thứ tự duyệt map KHÔNG cố định! Mỗi lần chạy có thể khác nhau.
6. Map Lồng Nhau
// Map của map
students := map[string]map[string]int{
"Minh": {"Math": 90, "English": 85},
"Lan": {"Math": 95, "English": 88},
}
fmt.Println(students["Minh"]["Math"]) // 90
📝 Tóm Tắt
map[KeyType]ValueType- Tạo:
make(map[string]int)hoặc literal - Thêm/Sửa:
m["key"] = value - Kiểm tra:
val, ok := m["key"] - Xóa:
delete(m, "key") - Duyệt:
for k, v := range m