按字母顺序获取地图中的键的简单方法

Posted

技术标签:

【中文标题】按字母顺序获取地图中的键的简单方法【英文标题】: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)

【问题讨论】:

【参考方案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

以上是关于按字母顺序获取地图中的键的简单方法的主要内容,如果未能解决你的问题,请参考以下文章

有没有一种简单的方法可以按字母顺序对字符串中的字符进行排序

获取键/值 javascript 对象的键的最佳方法

在 Java Map 中查找与最大值关联的键

C++ - 在地图中搜索所有具有相同值的键的最快方法是啥?

使用 Jackson 序列化带有排序键的 JSON

使用 C 类型 uuid_t 作为 std::map 中的键的最佳方法是啥?