go語言map按照key,value進行排序
阿新 • • 發佈:2019-02-11
1. go語言的map是無序的,多次遍歷map的結果可能是不同的
舉例如下:
package main import ( "fmt" ) // GetMap 得到map func GetMap() (result map[int]uint32) { result = map[int]uint32{} // 壓入各個資料 result[24] = 223 result[17] = 91 result[9] = 13 result[11] = 330 result[55] = 100 return } func main() { mapResu := GetMap() // 遍歷map for key, value := range mapResu { fmt.Printf("key = %v,value = %v\n", key, value) } }
第一次遍歷結果如下:
key = 17,value = 91
key = 9,value = 13
key = 11,value = 330
key = 55,value = 100
key = 24,value = 223
第二次遍歷結果如下:
key = 55,value = 100
key = 24,value = 223
key = 17,value = 91
key = 9,value = 13
key = 11,value = 330
可以看到兩次遍歷的結果是不同的
實現map遍歷有序
1. key有序
思路:對key排序,再遍歷key輸出value
程式碼如下:既可以從小到大排序,也可以從大到小排序
package main import ( "fmt" "sort" ) // GetMap 得到map及其所有的key // keys : map中所有的key,已排序,從小到大 func GetMap() (result map[int]uint32, keys []int) { result = map[int]uint32{} keys = []int{} // 壓入各個資料 result[24] = 223 result[17] = 91 result[9] = 13 result[11] = 330 result[55] = 100 // 得到各個key for key := range result { keys = append(keys, key) } // 給key排序,從小到大 sort.Sort(sort.IntSlice(keys)) // 給key排序,從大到小 //sort.Sort(sort.Reverse(sort.IntSlice(keys))) return } func main() { mapResu, keys := GetMap() // 注意:遍歷keys,而不是遍歷map for _, key := range keys { fmt.Printf("key = %v,value = %v\n", key, mapResu[key]) } }
列印結果如下:
key = 9,value = 13
key = 11,value = 330
key = 17,value = 91
key = 24,value = 223
key = 55,value = 100
2. value有序
思路是直接不用map,用struct存放key和value,實現sort介面,就可以呼叫sort.Sort進行排序了