專注做一家男人最愛的網(wǎng)站廣州seo運營
編程筆記 Golang基礎(chǔ) 024 映射
- 一、映射
- 二、映射的定義與初始化
- 三、基本操作
- 四、綜合示例程序
Go語言中的映射(map)是一種關(guān)聯(lián)數(shù)組或哈希表數(shù)據(jù)結(jié)構(gòu),它存儲鍵值對,其中每個鍵都是唯一的。在Go中,你可以使用
map[keyType]valueType
來聲明一個映射。
一、映射
在Go語言中,映射(map)是一種內(nèi)置的數(shù)據(jù)結(jié)構(gòu),它提供了一種關(guān)聯(lián)鍵值對的方式,允許通過唯一的鍵(key)來存儲和檢索對應(yīng)的值(value)。映射中的鍵是唯一的,并且用于快速查找相關(guān)聯(lián)的值。這種數(shù)據(jù)結(jié)構(gòu)常被稱為關(guān)聯(lián)數(shù)組、哈希表或字典,在其他編程語言中也有類似的概念。
Go語言中的映射定義語法如下:
map[keyType]ValueType
例如,創(chuàng)建一個存儲字符串到整數(shù)的映射:
var m map[string]int
使用映射時需要注意以下幾點:
- 映射在使用前必須初始化(可以通過
make
函數(shù)或者直接聲明并初始化),否則會引發(fā)運行時錯誤。 - 映射的鍵必須是可比較類型,也就是說,它們需要支持相等性判斷操作(== 和 !=)。
- 映射是無序的,因此不能保證迭代順序的一致性。
- Go 語言中的映射實現(xiàn)了高效的查找、插入和刪除操作,這些操作的時間復(fù)雜度通常接近 O(1)。
示例代碼:
// 初始化一個映射
m := make(map[string]int)// 插入鍵值對
m["apple"] = 1
m["banana"] = 2// 根據(jù)鍵查找值
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,同時返回相應(yīng)的值;如果鍵不存在,則“ok”為false,返回的值為零值。
二、映射的定義與初始化
// 定義并初始化一個字符串到整數(shù)的映射
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函數(shù)創(chuàng)建一個新的映射(推薦方式)
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)
}
四、綜合示例程序
下面是一個綜合應(yīng)用的示例程序,該程序創(chuàng)建了一個學(xué)生姓名到分數(shù)的映射,并實現(xiàn)了添加、查詢、刪除和遍歷操作:
package mainimport ("fmt"
)func main() {// 初始化一個映射scores := make(map[string]int)// 添加一些學(xué)生的分數(shù)scores["Alice"] = 95scores["Bob"] = 85scores["Charlie"] = 90// 查詢并打印某個學(xué)生的分數(shù)if score, ok := scores["Alice"]; ok {fmt.Printf("Alice's score is %d.\n", score)} else {fmt.Println("Alice is not in the records.")}// 更新一個學(xué)生的分數(shù)scores["Bob"] = 90// 刪除一個學(xué)生記錄delete(scores, "Charlie")// 遍歷并打印所有學(xué)生的分數(shù)fmt.Println("All students' scores:")for name, score := range scores {fmt.Printf("%s: %d\n", name, score)}
}
在這個示例中,我們首先創(chuàng)建了一個名為scores
的映射,用于存儲學(xué)生姓名及其對應(yīng)的分數(shù)。然后演示了如何向映射中插入數(shù)據(jù)、通過鍵查詢值、更新現(xiàn)有鍵的值以及刪除鍵值對。最后,通過range
關(guān)鍵字遍歷映射并打印所有的學(xué)生分數(shù)。