如何根据键或值对 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 进行排序。

更新于: 2023年4月25日

7K+ 阅读量

开启你的 职业生涯

通过完成课程获得认证

立即开始
广告

© . All rights reserved.