如何按值对 Map[string]int 进行排序?
技术问答
243 人阅读
|
0 人回复
|
2023-09-12
|
鉴于此代码块) y6 r: W( T8 W- S+ m
map[string]int {"hello":10,"foo":20,"bar":20}
# P: s* c4 V* ~ 我想打印出来
9 \0 q1 |; S1 A& L5 e6 I, Mfoo,20bar,20hello,10
! ]) W3 ]! N5 z8 Q$ c/ y8 e 按从高到低的顺序
+ w' r* a' C/ \+ @8 V $ \" C3 g4 R- d1 T! J. a$ ]' k
解决方案:
; K# t" B7 w4 E4 X) H 你可以写 len/less/swap 函数实现排序接口
: q R0 x# E; ufunc rankByWordCount(wordFrequencies map[string]int) PairList{ pl := make(PairList,len(wordFrequencies)) i := 0 for k,v := range wordFrequencies pl = Pair{k,v} i } sort.Sort(sort.Reverse(pl)) return pl}type Pair struct { Key string Value int}type PairList []Pairfunc (p PairList) Len() int { return len(p) }func (p PairList) Less(i,j int) bool { return p.Value < p[j].Value }func (p PairList) Swap(i,j int){ p,p[j] = p[j],p }- z( e0 B. K) O7 T s
|
|
|
|
|
|