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

  • 相关阅读:
    SQL的四种连接-左外连接、右外连接、内连接、全连接
    查看Linux下端口占用情况的命令
    linux的命令(1)
    xsheell的下载安装初级使用
    日交易,根据权重分配流量的算法,根据权重和交易笔数
    根据权重挑选通道的简单算法
    Java中的String与常量池
    JAVA虚拟机内存分配与回收机制
    JVM 内部运行线程介绍
    AspectJ切入点语法详解
  • 原文地址:https://www.cnblogs.com/niuben/p/14634932.html
Copyright © 2011-2022 走看看