一个示例搞定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,简单、简洁。

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