Golang 如何按键或值排序Map

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映射进行排序。通过提取和排序键或创建一个键值对的切片,并根据值对其进行排序,您可以按升序或降序对映射进行排序。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程