Golang 如何按键或值排序Map
Go是一种强大的编程语言,内置支持映射。映射是无序的键值对集合,有时需要按照键或值对它们进行排序。幸运的是,Go使用sort包提供了一种按键和值对映射进行排序的方式。在本文中,我们将讨论如何按键或值对Golang映射进行排序。
按键排序Golang Map
要按键排序Golang映射,我们首先需要提取映射中的键,并使用sort包对其进行排序。然后,我们可以遍历排序后的键,并从映射中检索它们对应的值。
示例
以下是按键排序Golang映射的示例 –
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
在上面的示例中,我们创建了一个键为字符串,值为整数的映射。然后,我们从映射中提取键,并使用sort.Strings()函数对它们进行排序。最后,我们遍历排序后的键,并打印出映射中对应的值。
按值对Golang中的映射进行排序
要按值对Golang中的映射进行排序,我们需要创建一个键值对的切片,并根据值对其进行排序。然后,我们可以从切片中提取排序后的键。
示例
以下是按值对Golang中的映射进行排序的示例−
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
在上面的示例中,我们创建了一个具有字符串键和整数值的映射。然后,我们创建了一个键值对的切片,并使用sort.Slice()函数和自定义的less函数根据值对其进行排序。最后,我们从切片中提取排序后的键,并打印出映射中相应的值。
结论
使用sort包可以轻松地按键或值对Golang映射进行排序。通过提取和排序键或创建一个键值对的切片,并根据值对其进行排序,您可以按升序或降序对映射进行排序。