从零学 Go:列表与字典

简介: 前面的文章主要介绍了 Go 容器的数组和切片的基本概念以及使用。切片是 Go 中提供了一种灵活,功能强悍的内置类型("动态数组")。与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。本文将会介绍列表与字典在 Go 语言中相关的使用。

前文回顾

前面的文章主要介绍了 Go 容器的数组和切片的基本概念以及使用。切片是 Go 中提供了一种灵活,功能强悍的内置类型("动态数组")。与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。本文将会介绍列表与字典在 Go 语言中相关的使用。

列表与字典

Golang 的列表通过双向链表的方式实现,能够高效进行元素的插入和删除操作。列表的初始化样式如下所示:

varnamelist.List// orname :=list.New()

我们可以直接声明初始化列表,也可以使用 `container/list` 包中的 `New` 函数初始化列表,后者将返回列表对应的指针。可以注意到,列表没有限制其内保存成员的类型,即任意类型的成员可以同时存在列表中。

下面我们将通过一个简单的例子演示列表的插入、删除和遍历操作,代码如下所示:

packagemainimport (
"container/list""fmt")
funcmain()  {
tmpList :=list.New()
fori:=1 ; i<=10 ; i++ {
tmpList.PushBack(i)
    }
first :=tmpList.PushFront(0)
tmpList.Remove(first)
forl :=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` 的使用方式,代码如下所示:

packagemainimport"fmt"funcmain() {
classMates1 :=make(map[int]string)
// 添加映射关系classMates1[0] ="小明"classMates1[1] ="小红"classMates1[2] ="小张"// 根据 key 获取 valuefmt.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 类似于索引,指向数据的值。


下面的文章,我们将继续介绍容器相关的知识:容器的遍历。

目录
相关文章
|
6月前
|
存储 缓存 安全
掌握Go语言:Go语言中的字典魔法,高效数据检索与应用实例解析(18)
掌握Go语言:Go语言中的字典魔法,高效数据检索与应用实例解析(18)
|
6月前
|
安全 Go 开发工具
Go语言学习6-字典类型
【1月更文挑战第7天】本篇 Huazie 介绍 Go语言中的字典类型
70 1
Go语言学习6-字典类型
|
2月前
|
Go
go语言创建字典
go语言创建字典
|
3月前
|
存储 Go 容器
Go从入门到放弃之map(字典)
Go从入门到放弃之map(字典)
|
11月前
|
Go
go map字典操作
go map字典操作
43 0
|
安全 Go
Go语言字典无限进化,实现可存任意类型值!
Go语言字典无限进化,实现可存任意类型值!
68 0
|
缓存 安全 算法
独家封印解开:Go语言列表List操作大揭秘
独家封印解开:Go语言列表List操作大揭秘
56 0
|
存储 人工智能 NoSQL
Go,从命名开始!Go的关键字和标识符全列表手册和代码示例!
Go,从命名开始!Go的关键字和标识符全列表手册和代码示例!
68 0
uiu
|
存储 前端开发 索引
我的Go+语言初体验——GO+实现数据结构之【队列与循环列表】(3)
我的Go+语言初体验——GO+实现数据结构之【队列与循环列表】(3)
uiu
120 0
我的Go+语言初体验——GO+实现数据结构之【队列与循环列表】(3)
|
Go
go语言基础数据结构学习---- 数组, 列表(list)和切片(slice)
go语言基础数据结构学习---- 数组, 列表(list)和切片(slice)
334 0
下一篇
无影云桌面