如何根据键或值对 Go 语言 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,
}
// Extract keys from map
keys := make([]string, 0, len(m))
for k := range m {
keys = append(keys, k)
}
// Sort keys
sort.Strings(keys)
// Print sorted 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,
}
// Create slice of key-value pairs
pairs := make([][2]interface{}, 0, len(m))
for k, v := range m {
pairs = append(pairs, [2]interface{}{k, v})
}
// Sort slice based on values
sort.Slice(pairs, func(i, j int) bool {
return pairs[i][1].(int) < pairs[j][1].(int)
})
// Extract sorted keys
keys := make([]string, len(pairs))
for i, p := range pairs {
keys[i] = p[0].(string)
}
// Print sorted 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 进行排序。
广告
数据结构
网络
关系型数据库
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP