返回顶部
首页 > 资讯 > 后端开发 > GO >Go语言中map集合的具体使用
  • 578
分享到

Go语言中map集合的具体使用

Go语言map集合Go语言map 2023-02-17 12:02:29 578人浏览 薄情痞子
摘要

目录1-1 定义1-2 map遍历1-3 map集合删除1-4 map是引用类型Go 语言提供了内置类型 map集合,它将一个值与一个键关联起来,可以使用相应的键检索值。 map是一

Go 语言提供了内置类型 map集合,它将一个值与一个键关联起来,可以使用相应的键检索值。

  • map是一种集合,可以像遍历数组或切片那样去遍历它。因为map是由Hash表实现的,所以对map的读取顺序不固定。
  • map是无序的,每次打印出来的map都会不一样,它不能通过index获取,而必须通过key获取。
  • map的长度是不固定的,和切片一样可以扩展。

内置的len()函数同样适用于map,返回map拥有的键值对的数量。但是map不能通过cap()函数计算容量(或者说cap()函数的参数不可以是map)。

同一个map中key必须保证唯一。key的数据类型必须是可参与比较运算的类型,也就是支持==或!=操作的类型,如布尔型、整型、浮点型、字符串、数组。切片、函数等引用类型则不能作为key的数据类型。

map的value可以是任何数据类型。map和切片一样,也是一种引用类型。

1-1 定义

map声明

  • 使用make()函数:变量名 := make(map[key类型]value类型)
    • 该声明方式,如果不初始化map,map也不等于nil。
  • 使用var关键字定义map:var 变量名 map[key类型] value类型
    • 使用var关键字声明map,未初始化的map的默认值是nil。
    • nil map不能存放键值对。
    • 如果要使用map存储键值对,必须在声明时初始化,或者使用make()函数分配到内存空间。

1-2 map遍历

map的初始化赋值和遍历

package main

import "fmt"

func main() {
    //1、声明时同时初始化
    var country = map[string]string{
        "China":  "Beijing",
        "Japan":  "Tokyo",
        "India":  "New Delhi",
        "France": "Paris",
        "Italy":  "Rome",
    }
    fmt.Println(country)

    // 短变量声明初始化方式
    rating := map[string]float64{"c": 5, "Go": 4.5, "python": 4.5, "c++": 3}
    fmt.Println(rating)

    //2、创建map后再赋值
    countryMap := make(map[string]string)
    countryMap["China"] = "Beijing"
    countryMap["Japan"] = "Tokyo"
    countryMap["India"] = "New Delhi"
    countryMap["France"] = "Paris"
    countryMap["Italy"] = "Rome"

    //3、遍历map(无序)
    //(1)、key 、value都遍历
    for k, v := range countryMap {
        fmt.Println("国家", k, "首都", v)
    }
    fmt.Println("-----------")

    //(2)、只展示value
    for _, v := range countryMap {
        fmt.Println("国家", "首都", v)
    }
    fmt.Println("-----------")

    //(3)、只展示key
    for k := range countryMap {
        fmt.Println("国家", k, "首都", countryMap[k])
    }
}

查看元素在集合中是否存在

  • 可以通过key获取map中对应的value值。语法为:map[key]。
  • 当key不存在时,会得到该value值类型的默认值,比如string类型得到空字符串,int类型得到0,程序不会报错。
  • 可以通过value, ok := map[key]获知key/value是否存在。ok是bool型,如果ok是true,则该键值对存在,否则不存在。
package main

import "fmt"

func main() {
    countryMap := make(map[string]string)
    countryMap["China"] = "Beijing"
    countryMap["Japan"] = "Tokyo"
    countryMap["India"] = "New Delhi"
    countryMap["France"] = "Paris"
    countryMap["Italy"] = "Rome"

    //查看元素是否在map中存在
    value, ok := countryMap["England"]
    fmt.Printf("%q \n", value)
    fmt.Printf("%T , %v \n", ok, ok)
    if ok {
        fmt.Println("首都:", value)
    } else {
        fmt.Println("首都信息未检索到!")
    }

    //或者
    if value, ok := countryMap["USA"]; ok {
        fmt.Println("首都:", value)
    } else {
        fmt.Println("首都信息未检索到!")
    }
}

1-3 map集合删除

delete(map, key) 函数用于删除集合的某个元素,参数为map和其对应的key。删除函数不返回任何值。

Go语言没有为map提供清空所有元素的函数,清空map的唯一办法是重新make一个新的map。不用担心垃圾回收的效率,Go语言的垃圾回收比写一个清空函数更高效。

package main

import "fmt"

func main() {
    //1、声明并初始化一个map
    map1 := map[string]string{
        "element":    "div",
        "width":      "100px",
        "height":     "200px",
        "border":     "solid",
        "background": "none",
    }

    //2、根据key删除map中的某个元素
    fmt.Println("删除前:", map1)
    if _, ok := map1["background"]; ok {
        delete(map1, "background")
    }
    fmt.Println("删除后:", map1)

    //3、清空map
    //map1 = map[string]string{}
    map1 = make(map[string]string)
    fmt.Println("清空后:", map1)
}

1-4 map是引用类型

map与切片相似,都是引用类型。将一个map赋值给一个新的变量时,它们指向同一块内存(底层数据结构)。修改两个变量的内容都能够引起它们所指向的数据发生变化。

package main

import "fmt"

func main() {
    personSalary := map[string]int{
        "Steven": 18000,
        "Daniel": 5000,
        "Josh":   20000,
    }
    fmt.Println("原始薪资:", personSalary)
    newPersonSalary := personSalary
    newPersonSalary["Daniel"] = 8000
    fmt.Println("修改后newPersonSalary:", newPersonSalary)
    fmt.Println("personSalary受影响情况:", personSalary)
}

虽然就底层而言,所有的数据都是由比特组成,但计算机一般操作的是固定大小的数,如整型、浮点型、布尔型、字符串、字符(byte、rune)等。进一步将这些数组织在一起,就可表达更多的对象。

Go语言提供了丰富的数据组织形式,这依赖于Go语言内置的数据类型。这些内置的数据类型,如函数与指针、数组、切片、map等,兼顾了硬件的特性和表达复杂数据结构的便捷性。

到此这篇关于Go语言中map集合的具体使用的文章就介绍到这了,更多相关Go语言中map集合内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: Go语言中map集合的具体使用

本文链接: https://lsjlt.com/news/196576.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Go语言中map集合的具体使用
    目录1-1 定义1-2 map遍历1-3 map集合删除1-4 map是引用类型Go 语言提供了内置类型 map集合,它将一个值与一个键关联起来,可以使用相应的键检索值。 map是一...
    99+
    2023-02-17
    Go语言map集合 Go语言map
  • Go 语言的 :=的具体使用
    目录1. 单变量 :=2. 多变量 :=3. 小结:=   Go 语言中 = 和 := 有什么区别1. 单变量 := Go 语言中新增了一个特殊的运算符:=,这个运算符可以使...
    99+
    2022-06-07
    GO
  • go语言中[]*int和*[]int的具体使用
    目录[]*int*[]int[]*int是一个指向指针的切片,本质上是切片,只不过切片里面存放的元素是指针;*[]int是一个指向切片的指针,本质上是指针,可以用*来获取切片; 简易...
    99+
    2023-05-16
    go语言 []*int go语言 *[]int go语言 []*int *[]int
  • Go语言中日期包(time包)的具体使用
    目录日期包常用函数定时器打印定时器终止定时器注意事项日期包 常用函数 time.Now(): 获取当前时间 package main import ( "fmt" "...
    99+
    2023-05-19
    Go 日期包 Go time
  • 怎么使用Go语言的map
    这篇文章主要讲解了“怎么使用Go语言的map”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用Go语言的map”吧!语法声明和初始化配合make使用,否则是nilvar map...
    99+
    2023-06-25
  • Go语言接口的嵌套的具体使用
    目录系统包中的接口嵌套组合在代码中使用接口嵌套组合在Go语言中,不仅结构体与结构体之间可以嵌套,接口与接口间也可以通过嵌套创造出新的接口。 一个接口可以包含一个或多个其他的接口,这相...
    99+
    2023-05-16
    Go语言接口嵌套 Go 接口嵌套组合
  • Go语言中的基本map使用方法
    Go语言是一种开源的编程语言,具有高效性和简洁性,其中的数据结构之一就是map。在Go语言中,map是一种“键值对”的数据结构,可以用来存储一系列无序的键值对。本文将详细介绍Go语言中...
    99+
    2024-04-02
  • C++中map容器的具体使用
    目录一、map容器1.1 简介1.2 pair对组的创建1.3 map容器构造和赋值1.4 map容器大小和交换1.5 map容器插入和删除1.6 map容器查找和统计1.7 map...
    99+
    2023-05-13
    C++ map容器
  • Redis 整数集合的具体使用(intset)
    目录一、集合概述二、Redis 整数集合(intset)1、intset 结构定义2、编码方式3、编码升级三、整数集合常用操作1、创建集合2、元素设置3、元素获取 4、元素...
    99+
    2024-04-02
  • javascript ES6中set集合、map集合如何使用
    本文小编为大家详细介绍“javascript ES6中set集合、map集合如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“javascript ES6中set集合、map集合如何使用”文章能帮助大家解决疑惑,下...
    99+
    2023-07-04
  • GO语言中接口和接口型函数的具体使用
    目录前言GO语言中的接口怎么用?使用函数类型实现接口有何好处?GO源码例子前言 今天在编码中,看到了一个非常经典的接口用法如下,于是查阅了相关资料,发现此种写法为接口型函数,本文对此...
    99+
    2023-03-09
    GO语言接口 GO语言接口型函数
  • go语言中有没有set集合
    这篇文章将为大家详细讲解有关go语言中有没有set集合,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。go语言没有set集合。Set是一个集合,set里的元素不能重复;golang的标准库中没有对set的操...
    99+
    2023-06-15
  • java中map集合怎么使用
    在Java中,Map是一种键值对的集合,它提供了一种将键映射到值的方式。Map接口是Java集合框架中的一部分,它有多个实现类,例如...
    99+
    2023-10-08
    java
  • 重学Go语言之数组的具体使用详解
    目录什么是数组数组的创建访问数组的元素数组的长度如何遍历数组数组的比较查找数组中的元素将数组作为函数参数二维与多维数组小结什么是数组 什么是数组?数组是有固定长度的相同数据类型元素的...
    99+
    2023-02-28
    Go语言 数组使用 Go语言 数组 Go 数组
  • Go语言类型内嵌和结构体内嵌的具体使用
    目录内嵌结构体结构内嵌特性结构体可以包含一个或多个匿名(或内嵌)字段,即这些字段没有显式的名字,只有字段的类型是必须的,此时类型也就是字段的名字。匿名字段本身可以是一个结构体类型,即...
    99+
    2023-05-14
    Go语言类型内嵌 Go语言结构体内嵌 Go语言 类型内嵌 结构体内嵌
  • Java中Map集合体系的基本使用和常用API是什么
    这篇文章主要讲解了“Java中Map集合体系的基本使用和常用API是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中Map集合体系的基本使用和常用API是什么”吧!Map集合概述...
    99+
    2023-07-05
  • Java中Map集合的双列集合怎么用
    这篇文章给大家分享的是有关Java中Map集合的双列集合怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Map集合Map概述Map是一种依照键(key)存储元素的容器,键(key)很像下标,在List中下标是...
    99+
    2023-06-25
  • Go语言基础之怎么使用Map
    这篇文章主要讲解了“Go语言基础之怎么使用Map”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Go语言基础之怎么使用Map”吧!引入mapmap,在Python中叫字典,Java中也叫map...
    99+
    2023-06-16
  • Go语言中结构体如何使用
    本篇文章为大家展示了Go语言中结构体如何使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。结构体Go语言中的基本数据类型可以表示一些事物的基本属性,但是当我们想表达...
    99+
    2024-04-02
  • Go语言中如何使用结构体
    这篇文章将为大家详细讲解有关Go语言中如何使用结构体,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。结构体结构体是 go 语言中一个比较重要的概念,在 c  语言中也有类似的东西。由...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作