从零学 Go:列表与字典
前文回顾
前面的文章主要介绍了 Go 容器的数组和切片的基本概念以及使用。本文将会介绍列表与字典在 Go 语言中相关的使用。
列表与字典
Golang 的列表通过双向链表的方式实现,能够高效进行元素的插入和删除操作。列表的初始化样式如下所示:
var name list.List
// or
name := list.New()
我们可以直接声明初始化列表,也可以使用 container/list
包中的 New
函数初始化列表,后者将返回列表对应的指针。可以注意到,列表没有限制其内保存成员的类型,即任意类型的成员可以同时存在列表中。
下面我们将通过一个简单的例子演示列表的插入、删除和遍历操作,代码如下所示:
package main
import (
"container/list"
"fmt"
)
func main() {
tmpList := list.New()
for i:= 1 ; i <= 10 ; i++ {
tmpList.PushBack(i)
}
first := tmpList.PushFront(0)
tmpList.Remove(first)
for l := tmpList.Front(); l != nil; l = l.Next(){
fmt.Print(l.Value, " ")
}
}
列表的每次插入操作都会返回一个 *list.Element
结构,用以指向当前插入值所在的节点,如果要对列表中的成员进行删除、移动或者指定插入操作,需要配合指定的 *list.Element
的进行,如Remove
函数。遍历列表的方式与其他容器稍微不同,需要配合 Front
函数获取列表的头元素,再使用其Next
函数依次往下遍历,代码如上所示。
Golang 中提供的映射关系容器为 map
,其内部通过散列表的方式实现。定义一个 map 的样式如下所示:
name := make(map[keyType]valueType)
map
需要使用 make
函数进行初始化,其中 keyType
即键类型,valueType
即键对应的值类型。我们将通过一个简单的例子样式 map
的使用方式,代码如下所示:
package main
import "fmt"
func main() {
classMates1 := make(map[int]string)
// 添加映射关系
classMates1[0] = "小明"
classMates1[1] = "小红"
classMates1[2] = "小张"
// 根据 key 获取 value
fmt.Printf("id %v is %v\n", 1, classMates1[1])
// 在声明时初始化数据
classMates2 := map[int]string{
0 : "小明",
1 : "小红",
2 : "小张",
}
fmt.Printf("id %v is %v\n", 3, classMates2[3])
}
如上代码所示,我们可以使用 make
函数构造好对应的 map
之后,再使用键值对的方式为 map
添加成员,也可以直接在声明时通过类 JSON 格式进行内容定义。可以通过键直接查询对应的值,如果不存在这样的键,将会返回值类型的默认值。可以采用以下的方式来查询某个键是否存在于 map
中:
mate,ok := classMate2[1]
如果键存在于 map
中,布尔型 ok
将会是 true
。
小结
本文主要介绍了列表与字典的基本使用,Go 语言中提供了 list 列表和 Map 映射关系容器,这两种容器都是我们日常经常使用到的。list 的实现基于双向链表。而 Map 是一种无序的键值对的集合。Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。
下面的文章,我们将继续介绍容器相关的知识:容器的遍历。
阅读最新文章,关注公众号:aoho求索
- 点赞
- 收藏
- 关注作者
评论(0)