专栏首页aoho求索Go 语言入门系列:列表与字典

Go 语言入门系列:列表与字典

前文回顾

前面的文章主要介绍了 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 类似于索引,指向数据的值。

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

推荐阅读

Go 语言入门系列:切片的应用实践

Go 语言入门系列:数组的使用

Go 语言入门系列:Go 语言中的常量别名与控制结构

本文分享自微信公众号 - aoho求索(aohoBlog),作者:cangwu

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-07-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Go 语言入门系列:列表与字典及其遍历

    前面的文章主要介绍了 Go 容器的数组和切片的基本概念以及使用。本文将会介绍列表与字典在 Go 语言中相关的使用,以及几种常用容易的遍历及其使用。。

    aoho求索
  • Go 语言入门系列:Go 语言:环境安装

    「最近将会更新 Go 语言入门的系列文章,非常基础。适合小白入门或者零基础的同学,已有相关 Go 基础的同学可以略过。」

    aoho求索
  • Go 语言入门系列:第一个 Go 程序

    上一篇文章,我们介绍了 Go 语言的一些特性以及环境的安装。具体可以参见:https://juejin.cn/user/3491704659786455

    aoho求索
  • Go 语言入门系列:Go 语言中的常量别名与控制结构

    前面一篇文章主要介绍了 Go 语言中的指针基本概念与相关用法。Go 语言限制了指针类型的偏移和运算能力,使得指针类型具备了指针高效访问的特性,但又不会发生指针偏...

    aoho求索
  • 【Go语言入门系列】(八)Go语言是不是面向对象语言?

    在【Go语言入门系列】(七)如何使用Go的方法?这一文中已经介绍了方法的概念,但这个方法实际上并不是面向对象中的方法。方法实际上是用户给其定义的类型的增加的新行...

    二十二画程序员
  • Go 语言入门系列:数组的使用

    前面的文章主要介绍了 Go 基于语法中的分支和循环控制结构。其中涉及到的 If 、Switch 和 for 等关键字,是我们日常编码所常用的。当我们在程序中操作...

    aoho求索
  • R语言入门 Chapter03 | 列表

    这篇文章讲述的是R语言中关于列表的相关知识。希望这篇R语言文章对您有所帮助!如果您有想学习的知识或建议,可以给作者留言~

    不温卜火
  • Go 语言入门系列:原生数据类型

    前面一篇文章介绍了 Go 基本语法,变量的声明与初始化。本文将会具体介绍 Go 原生数据类型。Go 语言中具备丰富的数据类型,基本类型有整型、浮点数、布尔型、字...

    aoho求索
  • Go语言入门系列(六)之再探函数

    在Go语言入门系列(二)之基础语法总结这篇文章中已经介绍过了Go语言的函数的基本使用,包括声明、参数、返回值。本文再详细介绍一下函数的其他使用。

    二十二画程序员
  • Go语言入门系列(四)之map的使用

    map是一种映射,可以将键(key)映射到值(value),格式为:map[keyType]valueType。

    二十二画程序员
  • Go 语言基础入门系列教程 —— 预热篇

    Go 语言又称 Golang,由 Google 公司于 2009 年发布,近几年伴随着云计算、微服务、分布式的发展而迅速崛起,跻身主流编程语言之列,和 Java...

    学院君
  • Go 语言入门系列:切片的应用实践

    Golang 中以标准库的方式提供了常用的容器实现,基本能够满足我们日常开发的需要。我们来具体学习下 Go 数组的使用。

    aoho求索
  • Go 语言入门系列:指针的基本应用

    前面文章介绍了 Go 语言原生数据类型。Golang 中具备丰富的数据类型,基本类型有整型、浮点数、布尔型、字符串型等,除此之外,还有切片、结构体、指针、通道、...

    aoho求索
  • Go语言入门系列(七)之如何使用Go的方法?

    如果你用过面向对象的语言,比如Java,那你肯定对类、对象、成员变量、方法等很熟悉。

    二十二画程序员
  • Golang 入门系列(三)Go语言基础知识汇总

    前面已经了 Go 环境的配置和初学Go时,容易遇到的坑,大家可以请查看前面的文章 https://www.cnblogs.com/zhangweizhong/c...

    架构师精进
  • Golang 入门系列(五)GO语言中的面向对象

    其实GO并不是一个纯面向对象编程语言。它没有提供类(class)这个关键字,只提供了结构体(struct)类型。

    架构师精进
  • R语言与生信系列①(R入门与临床三线表绘制)

    首次分享课讲的是TCGA数据分析,探究某一因素与肿瘤临床数据之间的关系,并自动生成可以用于SCI发表的三线表,如下图所示:

    用户1359560
  • 【Go语言入门系列】Go语言工作目录介绍及命令工具的使用

    在【保姆级教程】手把手教你进行Go语言环境安装及相关VSCode配置一文中已经配置过工作空间GOPATH的环境变量了,并在工作空间中新建了三个目录src、pkg...

    二十二画程序员
  • R语言入门之频率表和列联表

    ‍‍‍‍‍‍在这一期我们将要学习如何针对分类变量数据创建频率表和列联表,之后在此基础之上进行独立性检验、关联度测量以及相关数据的可视化。

    生信与临床

扫码关注云+社区

领取腾讯云代金券