編程筆記 Golang基礎 024 映射
- 一、映射
- 二、映射的定義與初始化
- 三、基本操作
- 四、綜合示例程序
Go語言中的映射(map)是一種關聯數組或哈希表數據結構,它存儲鍵值對,其中每個鍵都是唯一的。在Go中,你可以使用
map[keyType]valueType
來聲明一個映射。
一、映射
在Go語言中,映射(map)是一種內置的數據結構,它提供了一種關聯鍵值對的方式,允許通過唯一的鍵(key)來存儲和檢索對應的值(value)。映射中的鍵是唯一的,并且用于快速查找相關聯的值。這種數據結構常被稱為關聯數組、哈希表或字典,在其他編程語言中也有類似的概念。
Go語言中的映射定義語法如下:
map[keyType]ValueType
例如,創建一個存儲字符串到整數的映射:
var m map[string]int
使用映射時需要注意以下幾點:
- 映射在使用前必須初始化(可以通過
make
函數或者直接聲明并初始化),否則會引發運行時錯誤。 - 映射的鍵必須是可比較類型,也就是說,它們需要支持相等性判斷操作(== 和 !=)。
- 映射是無序的,因此不能保證迭代順序的一致性。
- Go 語言中的映射實現了高效的查找、插入和刪除操作,這些操作的時間復雜度通常接近 O(1)。
示例代碼:
// 初始化一個映射
m := make(map[string]int)// 插入鍵值對
m["apple"] = 1
m["banana"] = 2// 根據鍵查找值
value, ok := m["apple"]
if ok {fmt.Println("The value for key 'apple' is", value)
} else {fmt.Println("Key 'apple' not found")
}// 刪除鍵值對
delete(m, "banana")
在這個例子中,“ok”是一個布爾值,表示查找是否成功找到指定的鍵。如果鍵存在,則“ok”為true,同時返回相應的值;如果鍵不存在,則“ok”為false,返回的值為零值。
二、映射的定義與初始化
// 定義并初始化一個字符串到整數的映射
var numbers map[string]int = map[string]int{"one": 1, "two": 2, "three": 3}// 或者直接初始化而不聲明變量類型
numbers := map[string]int{"one": 1, "two": 2, "three": 3}// 使用make函數創建一個新的映射(推薦方式)
numbers := make(map[string]int)
numbers["one"] = 1
numbers["two"] = 2
numbers["three"] = 3
三、基本操作
- 插入和訪問元素:
numbers["four"] = 4 // 插入新的鍵值對
value, exists := numbers["one"] // 訪問元素,exists為bool型,表示鍵是否存在
if exists {fmt.Println("The value of 'one' is", value)
}
- 刪除元素:
delete(numbers, "two") // 刪除鍵為"two"的鍵值對
- 遍歷映射:
for key, value := range numbers {fmt.Printf("Key: %s, Value: %d\n", key, value)
}
四、綜合示例程序
下面是一個綜合應用的示例程序,該程序創建了一個學生姓名到分數的映射,并實現了添加、查詢、刪除和遍歷操作:
package mainimport ("fmt"
)func main() {// 初始化一個映射scores := make(map[string]int)// 添加一些學生的分數scores["Alice"] = 95scores["Bob"] = 85scores["Charlie"] = 90// 查詢并打印某個學生的分數if score, ok := scores["Alice"]; ok {fmt.Printf("Alice's score is %d.\n", score)} else {fmt.Println("Alice is not in the records.")}// 更新一個學生的分數scores["Bob"] = 90// 刪除一個學生記錄delete(scores, "Charlie")// 遍歷并打印所有學生的分數fmt.Println("All students' scores:")for name, score := range scores {fmt.Printf("%s: %d\n", name, score)}
}
在這個示例中,我們首先創建了一個名為scores
的映射,用于存儲學生姓名及其對應的分數。然后演示了如何向映射中插入數據、通過鍵查詢值、更新現有鍵的值以及刪除鍵值對。最后,通過range
關鍵字遍歷映射并打印所有的學生分數。