一个示例搞定Golang Array和Map
学习任何语言都必须学习数据结构,本文用一个示例带你轻松学习Golang Array 和 Map,顺便也实现了Set。
1. 示例需求
合并两个数组,去掉重复元素:
var a = []int{1, 3, 5, 7, 9, 10}
var b = []int{0, 2, 4, 6, 8, 10}
fmt.Println(Union(a, b)) // 输出: 0,1,2,3,4,5,6,7,8,9,10
因为需要去掉重复元素,因此需要判断一个元素是否存在。Java中有Set集合,Golang中可使用Map实现类似功能。
2. Array 和 Map
2.1. Array声明
定义数组语法:
var a[n]T
具体示例:
//array of 6 integers
var a0 [6]int
//array of 10 strings
var a1 [10]string
也可以直接初始化:
var a2 = [6]int{10, 5, 44, 7, 22, 99}
简介写法:
//array short declaration and initialization
a2 := [6]int{10, 5, 44, 7, 22, 99}
//array declaration and initialization without specifying the length
a3 := [...]int{10, 5, 44, 7, 22, 99}
2.2. Map声明
定义Map语法:
map[KeyType]ValueType
KeyType
是任何可比较类型,如:string,int,float。ValueType
可以为任何类型。
示例:
// string-int 键值对,使用时仍要使用make初始化
var map1 map[string]int
// string-int 键值对,内容为空(不是nil)
map2 := make(map[string]int)
// 预填充10个元素
map3 := make(map[string]int, 10)
// 通过键值对值初始化
map4 := map[string]float64{
"price": 12.8,
"units": 2.1,
}
操作示例:
// 定义空map2
map2 := make(map[string]int)
// 返回0
fmt.Println(map2["key1"])
//增加键值对
map2["key1"] = 10
// 打印 10
fmt.Println(map2["key1"])
//更新 key1 为33
map2["key1"] = 33
// 打印 33
fmt.Println(map2["key1"])
_, found := map2["key1"] // found == true
_, found := map2["key2"] // found == false
//打印33
if val, found := map2["key1"]; found {
fmt.Println(val)
}
我们看到如果定义map[int] bool类型,即可实现Set功能。
3. 示例实现
定义Union函数,参数为两个相同类型数组,返回一个数组:
func Union(a, b []int) [] int {
iSet := make(map[int] bool)
for _, item := range a{
iSet[item] = true
}
for _, val := range b{
if _, ok := iSet[val]; !ok{
a = append(a, val)
}
}
return a
}
首先定义map[int] bool ,用于判断重复。使用true填充map。
然后遍历数组b,利用map判断是否存在,不存在追加至数组a。最后返回结果。
4. 总结
本文利用两个数组合并示例介绍Golang的数组和Map,简单、简洁。
本文参考链接:https://blog.csdn.net/neweastsun/article/details/106139633