Skip to main content
 首页 » 编程设计

一个示例搞定Golang Array和Map

2022年07月19日121artech

一个示例搞定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
阅读延展