鉴于此代码块
map[string]int {"hello":10, "foo":20, "bar":20}
我想打印出来
foo, 20
bar, 20
hello, 10
按照从高到低的顺序
原文由 samol 发布,翻译遵循 CC BY-SA 4.0 许可协议
鉴于此代码块
map[string]int {"hello":10, "foo":20, "bar":20}
我想打印出来
foo, 20
bar, 20
hello, 10
按照从高到低的顺序
原文由 samol 发布,翻译遵循 CC BY-SA 4.0 许可协议
go 1.8 中有一个新的 sort.Slice 函数,所以现在这更简单了。
package main
import (
"fmt"
"sort"
)
func main() {
m := map[string]int{
"something": 10,
"yo": 20,
"blah": 20,
}
type kv struct {
Key string
Value int
}
var ss []kv
for k, v := range m {
ss = append(ss, kv{k, v})
}
sort.Slice(ss, func(i, j int) bool {
return ss[i].Value > ss[j].Value
})
for _, kv := range ss {
fmt.Printf("%s, %d\n", kv.Key, kv.Value)
}
}
https://play.golang.org/p/y1_WBENH4N
原文由 voutasaurus 发布,翻译遵循 CC BY-SA 3.0 许可协议
7 回答5.3k 阅读
6 回答6.9k 阅读✓ 已解决
4 回答2.3k 阅读
1 回答2k 阅读✓ 已解决
1 回答3.4k 阅读
2 回答2.2k 阅读
1 回答2.1k 阅读
在 Andrew Gerrand 的 Golang-nuts 上找到了答案
可以通过编写len/less/swap函数来实现排序接口
对于原始帖子,请在此处找到它 https://groups.google.com/forum/#!topic/golang-nuts/FT7cjmcL7gw