如何根據鍵或值對 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 進行排序。
廣告