直接上代码
package mainimport ( "fmt" "sort")type userInfo struct { Uid int64 //uid Score int64 //分数 Rank int //排名}type Score []userInfofunc (s Score) Len() int { return len(s) }func (s Score) Swap(i, j int) { s[i], s[j] = s[j], s[i] }func (s Score) Less(i, j int) bool { return s[i].Score > s[j].Score } // 从大到小排序func main() { users := []userInfo{} scores := []int64{2, 3, 4, 4, 5, 8, 8, 9, 1, 10,1} fmt.Println(scores) for i := 1; i <= 10; i++ { users = append(users, userInfo{ Uid: int64(i), Score: scores[i], }) } sort.Sort(Score(users)) fmt.Printf("%+v \n",users) res := ReckonRank(users) for _,v := range res { fmt.Printf("user %+v \n",v) }}func ReckonRank(users []userInfo) (usersInfo []userInfo) { index := 0 //排名 var lastScore int64 //上一次分数 usersInfo = make([]userInfo, 0) for _, user := range users { if user.Score != lastScore { index ++ lastScore = user.Score } usersInfo = append(usersInfo, userInfo{ Uid: user.Uid, Score: user.Score, Rank: index, }) } return}