go标准包中sort用法(1)

203 阅读1分钟

type Person struct {
   money int
   age   int
}

type PersonSlice []Person

//sort interface
//type aa []xx
// Len() int  -- 个数
// Swap(i, j int)  -- 交换
// Less(i, j int) bool -- 比较

func (p PersonSlice)Len() int {
   return len(p)
}

func (p PersonSlice)Swap(i, j int) {
   p[i], p[j] = p[j], p[i]
}

// 从小到大排
func (p PersonSlice)Less(i, j int) bool {
   // age 优先排 age相同的情况下 money大的排在前边
   // 错误写法
   //if p[i].age < p[j].age {
   // if p[i].money < p[j].money {
   //    return true
   // }
   //}
   if p[i].age < p[j].age {
      return true
   }
   if p[i].age > p[j].age {
      return false
   }
   return p[i].money < p[j].money
}

func sortTest() {
   // struct init
   var data PersonSlice
   //data = PersonSlice{
   // { 1000, 10 },
   // { 1000, 10 },
   // { 1000, 10 },
   // { 1000, 10 },
   // { 1000, 10 },
   // { 1000, 10 },
   //}

   data = PersonSlice{
      { money: 1000, age: 10 },
      { money: 1100, age: 11 },
      { money: 1200, age: 11 },
      { money: 1200, age: 12 },
      { money: 1500, age: 7 },
      { money: 1600, age: 8 },
      { money: 1400, age: 9 },
      { money: 1500, age: 20 },
   }

   sort.Sort(data)
   fmt.Println(" data --- ", data)
}

sort的主要用法:

type Person struct { a int b int }

type PersonSlice []Person

  1. 三个方法 func (p PrsonSlice)Len() -- 个数 func (p PrsonSlice)Less(i, j int) bool -- 比较 func (p PrsonSlice)Swap(i, j int) -- 交换