給定二維整數切片,按第 i 列(1-based)升序排序;若該列值相同,按第 i+1 列排序,以此類推至最後一列;若所有列均相同,保持原相對順序(穩定排序)。
實現 sort.Interface 三個方法:Len(), Less(i,j), Swap(i,j)。在 Less 中從指定列開始依次比較,直到分出大小或耗盡所有列。
b[c] { return false }
}
return i < j // 完全相等時保持原序(穩定性)
}
func main() {
data := [][]int{{1,2,3}, {2,3,4}, {2,3,1}, {1,3,1}}
// 按第 2 列排序(1-based → startCol=1)
sort.Sort(RowSlice{data, 1})
fmt.Println(data)
// 輸出:[[1 2 3] [2 3 1] [1 3 1] [2 3 4]]
}
| 原始行 | 第2列 | 第3列 | 說明 |
|---|---|---|---|
| [1,2,3] | 2 | 3 | 第2列最小,排首位 |
| [2,3,1] | 3 | 1 | 第2列=3,第3列=1 最小 |
| [1,3,1] | 3 | 1 | 同前,原序在前 |
| [2,3,4] | 3 | 4 | 第3列最大,排最後 |