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]
}
但在这种情况下,当任何可比较数组中有更多元素时,它不会被处理。
我想在 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]
}
但在这种情况下,当任何可比较数组中有更多元素时,它不会被处理。