• Go map字典排序


    前言

    我们已经知道 Go 语言的字典是一个无序集合,如果你想要对字典进行排序,可以通过分别为字典的键和值创建切片,然后通过对切片进行排序来实现。

    按照键进行排序

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

    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
    

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

    键值对调

    所谓键值对调,指的是交换字典的键和值,在一些编程语言中,内置了相应的函数,比如 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
    

    按照值进行排序

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

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

  • 相关阅读:
    如何解决列表框控件宽度不够的问题
    在windows Forms程序里面实现文件上传
    TFS的一些信息
    百钱百鸡问题
    如何移动SQL SERVER的系统数据库
    数据分页技术
    如何在报表中直接使用数据库中存储的图片
    重新注册MSJetOledb 4.0引擎
    2007 Microsoft Office Servers 已知问题/自述文件
    使用For XML与XSL(XSLT)配套快速输出查询结果到Web页面
  • 原文地址:https://www.cnblogs.com/niuben/p/14634932.html
Copyright © 2020-2023  润新知