Erlo

Golang map类型 复杂map类型

2021-04-18 10:01:41 发布   218 浏览  
页面报错/反馈
收藏 点赞

Golang中的map(映射)是一种无序的基于 key-value 的数据结构,类似Python中的字典,内部使用散列表(hash表)实现。除了常规的类型之外,还有两种较为复杂的类型:

  • 元素为map的slice
  • 元素为slice的map

其中,在使用元素为map的slice时应当注意,完成slice的初始化之后,还是不能直接对其元素进行赋值等操作,因为此时的map元素还未进行初始化,所以无法赋值。应当先用make函数初始化map,然后才可以赋值。例如:

package main

import "fmt"

// 复杂类型的map

func main() {
	// 1.元素类型为map的切片
	// 初始化一个以map为元素的切片
	var mapSlice = make([]map[string]int, 4, 8) // 只完成了slice的初始化,map仍然是nil
	fmt.Println(mapSlice)
	// mapSlice[0]["Albert"] = 666 // 此时还无法赋值,因为map还未初始化
	// 此时slice实际上是 [nil nil nil nil nil nil nil nil]

	// 完成slice内部map元素的初始化
	mapSlice[0] = make(map[string]int, 4)
	// 初始化map之后,才可以对slice内部的map元素进行赋值操作
	mapSlice[0]["Albert"] = 650
	mapSlice[0]["John"] = 620
	fmt.Println(mapSlice)

	// 使用append函数为slice添加新的map元素,由于是map元素,所以仍然要注意先用make初始化
	map1 := make(map[string]int)
	mapSlice = append(mapSlice, map1) // 将新的map元素添加到slice中
	fmt.Println(mapSlice)
	map1["Bob"] = 630
	fmt.Println(mapSlice)

	// 2.值为切片类型的map (比map类型的切片简单些)
	var m1 = make(map[string][]int, 10) // 初始化一个map
	m1["数学"] = []int{145, 137, 140}     // 为map中的slice元素赋值
	fmt.Println(m1)
	m1["语文"] = []int{132, 120, 125}
	fmt.Println(m1)
}

运行结果如下,

登录查看全部

参与评论

评论留言

还没有评论留言,赶紧来抢楼吧~~

手机查看

返回顶部

给这篇文章打个标签吧~

棒极了 糟糕透顶 好文章 PHP JAVA JS 小程序 Python SEO MySql 确认