Golang Maps(Aka HashMap)及示例

3 minute read

Golang Maps(Aka HashMap)及示例

Go 提供了实现哈希表的内置映射类型Map。Golang 映射是无序的数据集,可以用来存储键/值对中的数据。因为它是一个无序集合,这意味着无法预测 键/值 对返回的顺序。

一个简单的 map 声明如下所示-

1map[KeyType]ValueType

其中 KeyType 可以是任何可比较(comparable) 的类型。 ValueType 可以是任何类型。

让我们看一个使用 Golang Map 的简单示例。

 1package main
 2
 3import (
 4	"fmt"
 5)
 6
 7func main() {
 8
 9	// Creating a HashMap of String and Integer
10	var animal = make(map[string]int)
11
12	// Inserting values in hashmap
13	animal["Dog"] = 10
14	animal["Cat"] = 13
15	animal["Fish"] = 20
16
17	// Iterating Hashmap
18	for key, value := range animal {
19		fmt.Println("We have", value, key)
20	}
21
22	// Getting Value corresponding to Key
23	fmt.Println("Total Dogs ", animal["Dog"])
24
25	var sum int = 0
26	// Performing operation on hashmap
27	for _, value := range animal {
28		sum += value
29	}
30	fmt.Println("Total pets ", sum)
31
32}
1Output :
2We have 20 Fish
3We have 10 Dog
4We have 13 Cat
5Total Dogs  10
6Total pets  43

Compiling & Running

手动编译源代码:

1$ go build hash.go 
2$ ./hash

无需手动编译即可运行:

1$ go run hash.go

更多关于 Golang Map 的资料

要使用一些数据初始化映射,我们可以使用如下的映射文本

1colorCode := map[string]int{
2    "red": 3711,
3    "black":   2138,
4    "pink": 1908,
5    "green": 912,
6}

当使用任何一种循环时,我们都不能预测 Golang Map的迭代顺序。当在 map 上迭代时,我们可能得到与前一个输出不同的输出。有必要指出,Golang Map不宜同时使用。当我们试图同时读写它们时会发生什么并没有定义。

Deleting keys from Golang maps

 1package main
 2
 3import (
 4	"fmt"
 5)
 6
 7func main() {
 8
 9	// Creating a HashMap of String and Integer
10	var colorCode = make(map[string]int)
11
12	// Inserting values in hashmap
13	colorCode["Red"] = 2
14	colorCode["Blue"] = 4
15	colorCode["Green"] = 8
16	colorCode["Orange"] = 16
17	colorCode["Violet"] = 32
18	colorCode["Pink"] = 64
19	colorCode["Yellow"] = 128
20
21	// Iterating Hashmap
22	for key, value := range colorCode {
23		fmt.Println("We have", value, key)
24	}
25
26	// Deleting values
27	delete(colorCode, "Violet")
28	fmt.Println("------After Deletion------")
29
30	for key, value := range colorCode {
31		fmt.Println("We now have", value, key)
32	}
33
34}
 1We have 4 Blue
 2We have 8 Green
 3We have 16 Orange
 4We have 32 Violet
 5We have 64 Pink
 6We have 128 Yellow
 7We have 2 Red
 8------After Deletion------
 9We now have 2 Red
10We now have 4 Blue
11We now have 8 Green
12We now have 16 Orange
13We now have 64 Pink
14We now have 128 Yellow

在上面的例子中,我们将紫色从Map的代码中移除。

手动编译源代码:

1$ go build hashmapEx.go 
2$ ./hashmapEx

无需编译即可运行:

1$ go run hashmapEx.go

source: Golang Maps (Aka HashMap)