Go 语言函数式编程系列(十二) —— 数据类型篇:字典类型的遍历与排序

栏目: Go · 发布时间: 6年前

内容简介:我们可以像遍历数据那样对字段类型数据进行遍历:这种遍历模式和我们在 PHP 中通过当然,我们还可以借助匿名变量只获取字典的值:

遍历字典

我们可以像遍历数据那样对字段类型数据进行遍历:

testMap := map[string]int{
    "one": 1,
    "two": 2,
    "three": 3,
}

for key, value := range testMap {
    fmt.Println(key, value)
}

这种遍历模式和我们在 PHP 中通过 foreach 对关联数组进行遍历很像,上述代码输出结果是:

three 3
one 1
two 2

当然,我们还可以借助匿名变量只获取字典的值:

for _, value := range testMap {
    fmt.Println(value)
}

或者像这样只获取字典的键名:

for key := range testMap {
    fmt.Println(key)
}

键值对调

所谓键值对调指的是交换字典的键和值,在 PHP 关联数组中,有内置数组函数 array_flip 来实现类似的功能,在 Go 语言中,我们需要手动编写代码来实现,比如我们要对调 testMap 字典的键值,可以这么做:

invMap := make(map[int] string, 3)

for k, v := range testMap {
    invMap[v] = k
}

for k, v := range invMap {
    fmt.Println(k, v)
}

上述代码的打印结果是:

3 three
1 one
2 two

字典排序

在上篇教程中,我们提到过 Go 语言的字典不同于 PHP 的关联数组,是一个无序集合,如果你想要对字典进行排序,可以通过分别为字典的键和值创建切片,然后通过对切片进行 排序 来实现,换句话说,如果要对字典按照键进行排序,可以这么做:

keys := make([]string, 0)
for k, _ := range testMap {
    keys = append(keys, k)
}

sort.Strings(keys)  // 对键进行排序

fmt.Println("Sorted map by key:")
for _, k := range keys {
    fmt.Println(k, testMap[k])
}

上述代码打印结果是:

Sorted map by key:
one 1
three 3
two 2

该结果是按照键名在字母表中的排序进行升序排序的结果。

如果要对字典按照值进行排序,可以这么做:

values := make([]int, 0)
for _, v := range testMap {
    values = append(values, v)
}

sort.Ints(values)   // 对值进行排序

fmt.Println("Sorted map by value:")
for _, v := range values  {
    fmt.Println(invMap[v], v)
}

这里我们借助了之前创建的 invMap 通过字典的值反查对应的键,上述代码打印结果如下:

Sorted map by value:
one 1
two 2
three 3

该结果是按照键值对应数字大小进行升序排序的结果。

另外,你可能已经注意到我们在对切片进行排序时,使用了 Go 语言内置的 sort 包,这个包提供了一系列对切片和用户自定义集合进行排序的函数。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

第三次浪潮

第三次浪潮

托夫勒 / 黄明坚 / 中信出版社 / 2006-6 / 38.00元

《第三次浪潮》作者托夫勒在20多年前预见的未来是:跨国企业将盛行;电脑发明使SOHO(在家工作)成为可能;人们将摆脱朝九晚五工作的桎梏;核心家庭的瓦解;DIY(自己动手做)运动的兴起……时过境迁,如今我们才发现托夫勒的预言竟大多已成为了现实。   20年前的《第三次浪潮》在打开国门之初给人们心灵造成的冲击,其影响至今仍然连绵不绝。托夫勒在这本书中将人类社会划分为三个阶段:第一次浪潮为农业阶段......一起来看看 《第三次浪潮》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具