一個示例搞定Golang Array和Map

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章