一尘不染

朗朗排序2D阵列

go

我想在Go中排序一个二维数组。谁能建议我该怎么做?

例如,如果我有,

    var matrix [3][3]int{
      {2,3,1},
      {6,3,5},
      {1,4,9}
    }

然后有类似的东西,

sort.Sort(matrix)

阅读 159

收藏
2020-07-02

共1个答案

一尘不染

您必须定义自己如何对这种类型进行排序。您可以创建必要的方法来使用该sort.Sort接口,并根据需要使用指针来更改数组值:https
//play.golang.org/p/thdf-k2k3o
    type Matrix [3][3]int

    func (m Matrix) Len() int { return len(m) }
    func (m Matrix) Less(i, j int) bool {
        for x := range m[i] {
            if m[i][x] == m[j][x] {
                continue
            }
            return m[i][x] < m[j][x]
        }
        return false
    }

    func (m *Matrix) Swap(i, j int) { m[i], m[j] = m[j], m[i] }
    func main() {
        m := Matrix(matrix)
        sort.Sort(&m)
    }
或使用该sort.Slice函数,转换matrix为切片并提供适当的较少函数:https
//play.golang.org/p/4hrghm9gib
    sort.Slice(matrix[:], func(i, j int) bool {
        for x := range matrix[i] {
            if matrix[i][x] == matrix[j][x] {
                continue
            }
            return matrix[i][x] < matrix[j][x]
        }
        return false
    })

    fmt.Println(matrix)
2020-07-02