golang 二维切片排序

2020-03-16  本文已影响0人  Flag丶
package main

import (
"fmt"
"sort"
)

//type value []string
type value [][]int

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

// 二维切片排序
func (p value) Less(i, j int) bool {
    for k := 0; k < len(p[i]); k++ {
        if len(p[j]) == 0 || p[j] == nil { // 长度为空时
          return true
        }
      fmt.Println(p, i, j, k)
        if p[i][k] > p[j][k] { // < 则正序
            return true
        } else if p[i][k] == p[j][k] {
          if len(p[j]) == k+1 { //前序相同但长度不同的情况
            return true
          }
        continue
        } else {
          return false
        }
    }
return true
}

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

func main() {
    var v value
    v = [][]int{
        {1, 2, 5, 6, 7, 8},
        {2},
        {},
        {4, 5, 6},
        {3, 3, 5, 6, 7, 9},
        {2, 3, 5, 6, 7, 9},
        {4, 3, 5, 6, 7, 9},
    }
    sort.Sort(v)
    fmt.Println(v)
}
上一篇 下一篇

猜你喜欢

热点阅读