从浅入深带你掌握Golang数据结构map

从浅入深带你掌握Golang数据结构map

什么是map

map是Golang中非常常用的一种数据结构,类似于其他语言中的哈希表。map是一种无序的键值对数据结构,通过key来快速定位和访问对应的value。map的key可以是任何可比较类型(如int,float等),value可以是任何类型。

map的基本操作

创建map

创建map的方式如下所示:

var m map[key_type]value_type

或

m := make(map[key_type]value_type)

例如:

m := make(map[string]int)

上面的代码创建了一个空的map,key类型为string,value类型为int。

添加元素

向map中添加元素的方式如下所示:

m[key] = value

例如:

m["foo"] = 1

上面的代码向map m中添加了一个key为"foo",value为1的元素。

删除元素

从map中删除元素的方式如下所示:

delete(m, key)

例如:

delete(m, "foo")

上面的代码从map m中删除了key为"foo"的元素。

查找元素

从map中查找元素的方式如下所示:

value, ok := m[key]

例如:

value, ok := m["foo"]

上面的代码从map m中查找key为"foo"的元素,并将其value值赋值给变量value。如果查找成功,ok的值将为true,否则为false。

遍历map

遍历map的方式如下所示:

for key, value := range m {
    // do something with key and value
}

例如:

for k, v := range m {
    fmt.Printf("%s -> %d\n", k, v)
}

上面的代码遍历了map m,并将每个元素的key和value输出。

map的高级操作

map的长度

map的长度可以通过len函数获取,例如:

l := len(m)

嵌套map

map可以嵌套使用,例如:

m := map[string]map[string]int{
    "foo": map[string]int{"bar": 1},
    "baz": map[string]int{"qux": 2},
}

上面的代码创建了一个嵌套map,其中第一层的key为"foo"和"baz",第二层的key分别为"bar"和"qux",value为int类型的数字。

map作为参数传递

map可以作为函数的参数传递,例如:

func someFunc(m map[string]int) {
    // do something with m
}

map的零值

map的零值为nil,表示未初始化。对于未初始化的map,不能直接添加元素,需要通过make函数进行初始化,例如:

var m map[string]int
m = make(map[string]int)

示例说明

示例1:统计字符串中字符出现的次数

func CountChars(s string) map[rune]int {
    m := make(map[rune]int)
    for _, c := range s {
        _, ok := m[c]
        if !ok {
            m[c] = 1
        } else {
            m[c]++
        }
    }
    return m
}

func main() {
    s := "hello world"
    m := CountChars(s)
    for k, v := range m {
        fmt.Printf("%c -> %d\n", k, v)
    }
}

上面的代码统计了字符串s中字符出现的次数,并输出了每个字符和其出现次数。

示例2:开闭合检查器

func CheckOpenClose(s string) bool {
    stack := make([]rune, 0)
    m := map[rune]rune{
        '}': '{',
        ']': '[',
        ')': '(',
    }
    for _, c := range s {
        if _, ok := m[c]; ok {
            if len(stack) == 0 || stack[len(stack)-1] != m[c] {
                return false
            } else {
                stack = stack[:len(stack)-1]
            }
        } else if c == '{' || c == '[' || c == '(' {
            stack = append(stack, c)
        }
    }
    return len(stack) == 0
}

func main() {
    s := "{a[b(c)]d}e"
    fmt.Println(CheckOpenClose(s)) // true
    s1 := "{a[b(c]d}e"
    fmt.Println(CheckOpenClose(s1)) // false
}

上面的代码检查了一个字符串中的符号是否开闭合匹配,如果匹配,则返回true,否则返回false。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:从浅入深带你掌握Golang数据结构map - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • win11 ip地址自动获取怎么设置?win11设置ip地址自动获取方法

    Win11 IP地址自动获取设置攻略 在Win11操作系统中,设置IP地址自动获取非常简单。下面是详细的步骤: 打开“设置”:点击任务栏上的“开始”按钮,然后点击“设置”图标(齿轮状图标)。 进入“网络和互联网”设置:在设置窗口中,点击左侧导航栏中的“网络和互联网”选项。 打开网络设置:在“网络和互联网”设置页面中,点击右侧的“高级网络设置”链接。 进入网络…

    other 2023年7月31日
    00
  • Win7如何更改文件类型?Win7系统更改文件类型的方法

    Win7如何更改文件类型? 在Win7系统中,更改文件类型的方法可以通过以下步骤完成: 打开文件夹选项:首先,打开任意一个文件夹,然后点击窗口顶部的“工具”菜单,接着选择“文件夹选项”。 选择文件类型:在弹出的“文件夹选项”窗口中,点击“文件类型”选项卡。这个选项卡会列出当前系统中已经注册的文件类型。 选择要更改的文件类型:在文件类型列表中,找到你想要更改的…

    other 2023年8月6日
    00
  • ssh远程登陆没有用户名和主机名的解决方法

    为了让ssh远程登录更加方便,我们可以配置ssh配置文件来免去每次ssh登录时需要输入用户名和主机名的步骤。接下来将介绍如何创建ssh配置文件以及如何在ssh配置文件中配置无需输入用户名和主机名即可远程登录。 创建SSH配置文件 SSH配置文件默认位于用户目录下的 ~/.ssh/config。如果该文件不存在,则可以通过 touch 命令创建该文件。输入以下…

    other 2023年6月27日
    00
  • rocketmq集群模式

    RocketMQ集群模式 简介 RocketMQ是一款开源、分布式、可扩展的消息系统,支持10M+的延迟消息,每日传输TB级别的消息。RocketMQ的集群模式可以达到高可用,水平扩展的目的,为业务系统提供大规模的实时消息解决方案。 集群模式 集群架构图 RocketMQ的集群模式采用主从复制的方式进行消息备份和高可用。如下图所示: 主从角色的划分 在Roc…

    其他 2023年3月28日
    00
  • 使用hbuilder开发移动app

    以下是使用HBuilder开发移动App的完整攻略,包含两个示例说明: 步骤1:安装HBuilder 首先,您需要下载并安装HBuilder。您可以官方网站(https://www.dcloud.io/hbuilderx.html)下载HBuilder。 步骤2:创建新项目 在HBuilder中创建一个新项目您可以使用以下步骤创建新项目: 打开HBuilde…

    other 2023年5月6日
    00
  • win7系统减肥的详细步骤(win7瘦身再减3G空间)

    Win7系统减肥的详细步骤(Win7瘦身再减3G空间) Win7系统减肥是指通过一系列操作来减少系统占用的磁盘空间,提高系统性能。下面是一个完整的攻略,包含了详细的步骤和两个示例说明。 步骤一:清理临时文件 打开“开始”菜单,点击“计算机”。 右键点击系统盘(通常是C盘),选择“属性”。 在“常规”选项卡中,点击“磁盘清理”。 在弹出的对话框中,勾选需要清理…

    other 2023年8月1日
    00
  • python-使用np.searchsorted查找最新时间戳

    以下是关于“Python使用np.searchsorted查找最新时间戳”的完整攻略,包括np.searchsorted的基本知识、使用方法和两个示例等。 np.searchsorted的基本知识 np.searchsorted是NumPy中的一个函数,用于在已排序的数组中查找指定值的插入位置。它可以用于查找最新时间戳等用场景。 np.searchsorte…

    other 2023年5月7日
    00
  • 关于ubuntu系统忘记密码的解决方法合集

    关于Ubuntu系统忘记密码的解决方法合集 Ubuntu是一款流行的Linux操作系统。然而,有时候用户可能会忘记Ubuntu系统的密码,这将导致您无法登录到系统。但是,不要担心,我们为您提供了以下解决方法,以帮助您重置Ubuntu系统密码。 方法一:使用GRUB菜单 在启动系统时,按住SHIFT键来打开GRUB菜单。 选择Ubuntu操作系统,并按下E键来…

    其他 2023年3月29日
    00
合作推广
合作推广
分享本页
返回顶部