Golang 如何通过键或值对 Map 进行排序
Go 是一种功能强大的编程语言,内置支持 map。Map 是无序的键-值对集合,有时需要按键或值对它们进行排序。幸运的是,Go 使用 sort 包提供了一种按键和值排序 map 的方法。在本文中,我们将讨论如何通过键或值对 Golang Map 进行排序。
按键排序 Golang Map
要按键对 Golang Map 进行排序,首先需要从 Map 中提取键,并使用 sort 包对它们进行排序。然后,我们可以遍历排序后的键,并从 map 中检索相应的值。
例子
以下是按键排序 Golang Map 的示例−
package main
import (
"fmt"
"sort"
)
func main() {
m := map[string]int{
"foo": 2,
"bar": 1,
"baz": 3,
}
//从 Map 中提取键
keys := make([]string, 0, len(m))
for k := range m {
keys = append(keys, k)
}
//排序键
sort.Strings(keys)
//打印已排序的 Map
for _, k := range keys {
fmt.Printf("%s: %d\n", k, m[k])
}
}
输出
bar: 1
baz: 3
foo: 2
在上面的示例中,我们创建了一个具有字符串键和整数值的 map。然后,我们从 map 中提取键并使用 sort.Strings() 函数对其进行排序。最后,我们遍历排序后的键并打印出 map 中对应的值。
按值排序 Golang Map
要按值对 Golang Map 进行排序,需要创建一个键值对的切片并根据值对其进行排序。然后,我们可以从切片中提取已排序的键。
例子
以下是按值排序 Golang Map 的示例−
package main
import (
"fmt"
"sort"
)
func main() {
m := map[string]int{
"foo": 2,
"bar": 1,
"baz": 3,
}
//创建键值对的切片
pairs := make([][2]interface{}, 0, len(m))
for k, v := range m {
pairs = append(pairs, [2]interface{}{k, v})
}
//基于值对切片进行排序
sort.Slice(pairs, func(i, j int) bool {
return pairs[i][1].(int) < pairs[j][1].(int)
})
//提取已排序的键
keys := make([]string, len(pairs))
for i, p := range pairs {
keys[i] = p[0].(string)
}
//打印已排序的 Map
for _, k := range keys {
fmt.Printf("%s: %d\n", k, m[k])
}
}
输出
bar: 1
foo: 2
baz: 3
在上面的示例中,我们创建了一个具有字符串键和整数值的 map。然后,我们创建了一个键值对切片,并使用 sort.Slice() 函数和自定义的 less 函数根据值对其进行排序。最后,我们从切片中提取已排序的键,并打印出 map 中对应的值。
结论
使用 sort 包通过键或值对 Golang Map 进行排序非常简单。通过提取和排序键,或者创建键值对切片并基于值对其进行排序,您可以按升序或降序方式对 map 进行排序。