package main import ( "fmt" "sort" ) type Player struct { name string } type Team struct { Name string Members []Player } type League struct { Wins map[string]int } type Ranker interface { Ranking () []string } func (l League) MatchResult(ft, st string, fscore, sscore int) { l.Wins[ft] += fscore l.Wins[st] += sscore } func (l League) Ranking() []string { for k, v := range l.Wins { fmt.Printf("Command %s has %d scores\n", k, v) } keys := make([]string, 0, len(l.Wins)) for k := range l.Wins { keys = append(keys, k) } sort.Slice(keys, func(i, j int) bool { return l.Wins[keys[i]] > l.Wins[keys[j]] }) for _, k := range keys { fmt.Println(k, l.Wins[k]) } return keys } func main() { Spartak := Team{ Name: "Spartak", Members: []Player{ {name: "Titov"}, {name: "Dzuba"}, }, } Dinamo := Team{ Name: "Dinamo", Members: []Player{ {name: "Ivanov"}, {name: "Petrov"}, }, } Torpedo := Team{ Name: "Torpedo", Members: []Player{ {name: "Sidorov"}, {name: "Zalupkin"}, }, } league := League{ Wins: make(map[string]int), } league.MatchResult(Spartak.Name, Dinamo.Name, 2, 4) league.MatchResult(Torpedo.Name, Dinamo.Name, 3, 3) league.MatchResult(Spartak.Name, Torpedo.Name, 1, 2) fmt.Println(league) fmt.Println(league.Ranking()) }