Golang 如何通过键或值对 Map 进行排序

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])
   }
}
Go

输出

bar: 1
baz: 3
foo: 2
Go

在上面的示例中,我们创建了一个具有字符串键和整数值的 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])
   }
}
Go

输出

bar: 1
foo: 2
baz: 3
Go

在上面的示例中,我们创建了一个具有字符串键和整数值的 map。然后,我们创建了一个键值对切片,并使用 sort.Slice() 函数和自定义的 less 函数根据值对其进行排序。最后,我们从切片中提取已排序的键,并打印出 map 中对应的值。

结论

使用 sort 包通过键或值对 Golang Map 进行排序非常简单。通过提取和排序键,或者创建键值对切片并基于值对其进行排序,您可以按升序或降序方式对 map 进行排序。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册