php 字典类型,数据类型篇(十):字典类型的遍历与排序

数据类型篇(十):字典类型的遍历与排序

由 学院君 创建于1年前, 最后更新于 4个月前

版本号 #2

5605 views

7 likes

0 collects

遍历字典

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

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 包,这个包提供了一系列对切片和用户自定义集合进行排序的函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值