【问题标题】:Easy way to get the keys in a map in alphabetical order按字母顺序获取地图中的键的简单方法
【发布时间】:2011-01-03 13:19:59
【问题描述】:

在 Go 中,让地图中的键按字母顺序排序的最简单方法是什么?这是我能做到的最短方法:

package main

import "container/vector"
import "fmt"
import "sort"

func main() {
    m := map[string]string {"b":"15", "z":"123123", "x":"sdf", "a":"12"}
    var keys vector.StringVector;
    for k,_ := range ( m ) {
            keys.Push(k)
    }
    sort.Sort( &keys )
    fmt.Printf("%v\n", keys)
}

【问题讨论】:

    标签: sorting map go


    【解决方案1】:

    您正在使用 StringVector 对字符串数组进行排序。为了最大限度地减少开销,您可以对字符串数组进行排序。

    package main
    
    import (
        "fmt"
        "sort"
    )
    
    func main() {
        m := map[string]string{"b": "15", "z": "123123", "x": "sdf", "a": "12"}
        mk := make([]string, len(m))
        i := 0
        for k, _ := range m {
            mk[i] = k
            i++
        }
        sort.Strings(mk)
        fmt.Println(mk)
    }
    

    输出:

    [a b x z]
    

    【讨论】:

    • SortStrings 函数似乎在当前(2012 年 3 月)Go 中消失了。现在似乎只是Strings(即sort.Strings(mk)
    【解决方案2】:

    那将是最优雅的方法:

    package main
    
    import (
        "fmt"
        "sort"
    )
    
    func main() {
        m := map[string]string{"b": "15", "z": "123123", "x": "sdf", "a": "12"}
        keys := make([]string, 0, len(m))
        for key := range m {
            keys = append(keys, key)
        }
        sort.Strings(keys)
        fmt.Println(keys)
    }
    

    【讨论】:

    • BenchmarkFirst-4 5000000 367 ns/op 96 B/op 2 allocs/op BenchmarkSecond-4 5000000 352 ns/op 96 B/op 2 allocs/op PASS ok slice 4.383s
    猜你喜欢
    • 2017-02-14
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    • 2020-09-30
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多