一個示例搞定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,簡單、簡潔。