type CardData struct { CardType int CardValue int } type Cards []*CardData
//重写sort的三个方法即可
func (c Cards)Len() int { //重写 return len(c) } func (c Cards)Less(i, j int) bool {//重写 if c[i].CardType == c[j].CardType{ return c[i].CardValue < c[j].CardValue }else if c[i].CardType < c[j].CardType{ return true }else { return false } //return } func (c Cards)Swap(i, j int) {//重写 c[i], c[j] = c[j], c[i] } func main() { cs := make(Cards,5) cs[0] = &CardData{3,5} cs[1] = &CardData{2,3} cs[2] = &CardData{1,2} cs[3] = &CardData{1,1} cs[4] = &CardData{8,5} fmt.Println(cs) for i, v := range cs{ fmt.Println(i, *v) } sort.Sort(cs) for i, v := range cs{ fmt.Println("----",i, *v) } }
输出为:
[0xc0420361d0 0xc0420361e0 0xc0420361f0 0xc042036200 0xc042036210] 0 {3 5} 1 {2 3} 2 {1 2} 3 {1 1} 4 {8 5} ---- 0 {1 1} ---- 1 {1 2} ---- 2 {2 3} ---- 3 {3 5} ---- 4 {8 5}