Go lang 对可变大小的二维数组进行排序

Go lang sort a 2D Array of variable size

我想在 golang 中对二维数组进行排序,例如:

        {40, 100, 20},
        {30, 100},
        {40, 10},
        {30, 100, 80},
        {30, 60},
        {30, 80},
        {100, 20},
        {10, 80},
        {50, 30},

我提到了这个go playground example。它在上述情况下工作正常,但如果我如下更改数组的顺序:

        {40, 100, 20},
        {40, 10},
        {30, 100},
        {30, 100, 80},
        {30, 60},
        {30, 80},
        {100, 20},
        {10, 80},
        {50, 30},

有时会报这样的错误:

panic: runtime error: index out of range [2] with length 2

任何关于可能出错的建议,为什么它在某些情况下有效而在其他情况下无效?

谢谢!

您提供的代码仅适用于定长数组。错误来自程序需要将 3 元素数组与 2 元素数组进行比较的地方,因为它无法访问第二个数组的第三个元素。这适用于第一种情况,因为比较顺序,不会有任何情况下有 3 到 2 的比较,只有 2 到 3,这是可以完成的,但在这种情况下,第二个数组的第三个元素不会被考虑在内。

您必须修改您的代码,使其循环次数只达到两个数组的最小元素数:

    for x := 0; x < int(math.Min(float64(len(matrix[i])), float64(len(matrix[j])))); x++ {
        if matrix[i][x] == matrix[j][x] {
            continue
        }
        return matrix[i][x] < matrix[j][x]
    }

但在这种情况下,当任何可比较数组中有更多元素时,它不会被处理。