Golang 跨列对二维数组排序
什么是Golang中的2D数组
在Go编程语言中,二维数组是数组的数组,其中外部数组的每个元素本身是一个简单数组。声明大小为2 X 3的二维数组的代码可以通过编写var array[2][3]来完成。需要注意的是,2D数组的大小是固定的,一旦创建,其大小就不能更改。如果需要动态的2D数组,可以使用切片的切片。
下面是一个跨列排序二维数组的例子 −
输入
3 2 1
6 4 5
8 9 7
输出
1 2 3
4 5 6
7 8 9
方法1:使用for循环
在这种方法中,我们将在golang程序中使用“for”循环来帮助我们对2D数组进行列排序。
步骤
- 步骤1 - 首先,我们需要导入fmt包。
-
步骤2 - 然后,开始main()函数。在main()函数内部,初始化一个包含要排序的元素的整数类型的2D数组。使用for循环和fmt.Println()函数将数组打印到屏幕上。
-
步骤3 - 使用三个嵌套的for循环来对元素进行排序。前两个for循环用于遍历2D数组,而第三个for循环用于选择循环的特定元素并将其放置在相应的位置上。
-
步骤4 - 如果当前元素大于下一个元素,则需要交换元素的位置,否则需要继续循环。
-
步骤5 - 一旦对循环的每个元素进行了迭代,我们得到的结果数组将按升序排序。我们现在可以使用fmt.Println()函数将这些数组的元素打印到屏幕上。
示例
以下是一个使用“for”循环对二维数组进行列排序的Golang程序。
package main
import (
"fmt"
)
func main() {
// 2D array to sort
arr := [][]int{{3, 2, 1}, {6, 4, 5}, {8, 9, 7}}
var rows int = len(arr)
var cols int = len(arr[0])
fmt.Println("The given 2D array to be sorted is:")
for i := 0; i < rows; i++ {
for j := 0; j < cols; j++ {
fmt.Print(arr[i][j], "\t")
}
fmt.Println()
}
// sorting the 2D array
for i := 0; i < len(arr); i++ {
for j := 0; j < len(arr[i])-1; j++ {
for k := 0; k < len(arr[i])-j-1; k++ {
if arr[i][k] > arr[i][k+1] {
temp := arr[i][k]
arr[i][k] = arr[i][k+1]
arr[i][k+1] = temp
}
}
}
}
fmt.Println()
// printing the sorted 2D array
fmt.Println("The final array obtained after sorting the 2D array is:")
for i := 0; i < rows; i++ {
for j := 0; j < cols; j++ {
fmt.Print(arr[i][j], "\t")
}
fmt.Println()
}
}
输出
The given 2D array to be sorted is:
3 2 1
6 4 5
8 9 7
The final array obtained after sorting the 2D array is:
1 2 3
4 5 6
7 8 9
方法2:使用内部函数
在这种方法中,我们将使用内部函数来对2D数组的元素进行排序。
语法
func len(v Type) int
len()函数用于获取任何参数的长度。它接受一个参数作为数据类型变量,我们希望找到其长度,并返回整数值,该值即为该变量的长度。
func Ints(slc []int)
Ints()函数存在于sorts包中,用于对特定的整数数组进行排序。该函数接受待排序的切片作为参数,并在对切片元素进行排序后返回最终的切片。
type Slice []int
slice()函数存在于sort包中。该函数用于将接口的方法附加到int数组中,以便可以按升序排列。
步骤
- 步骤1 - 首先,我们需要导入fmt包。
-
步骤2 - 然后,启动main()函数。在main()中初始化一个要排序的整数的2D数组。使用for循环和fmt.Println()函数将数组打印在屏幕上。
-
步骤3 - 使用for循环来排序元素。for循环用于迭代2D数组,在每次迭代中将元素传递给sort包中的Ints()函数。
-
步骤4 - 一旦迭代了循环的每个元素,我们收到的结果数组将按列升序排列。现在可以使用fmt.Println()函数将这些数组的元素打印在屏幕上。
示例1
在以下示例中,我们使用sort.Ints()将2D数组按列排序。
package main
import (
"fmt"
"sort"
)
func main() {
// 2D array to sort
arr := [][]int{{3, 2, 1}, {6, 4, 5}, {8, 9, 7}}
var rows int = len(arr)
var cols int = len(arr[0])
fmt.Println("The given 2D array to be sorted is:")
for i := 0; i < rows; i++ {
for j := 0; j < cols; j++ {
fmt.Print(arr[i][j], "\t")
}
fmt.Println()
}
// sorting the 2D array
for i := 0; i < len(arr); i++ {
sort.Ints(arr[i])
}
fmt.Println()
// printing the sorted 2D array
fmt.Println("The final sorted array is:")
for i := 0; i < rows; i++ {
for j := 0; j < cols; j++ {
fmt.Print(arr[i][j], "\t")
}
fmt.Println()
}
}
输出
The given 2D array to be sorted is:
3 2 1
6 4 5
8 9 7
The final sorted array is:
1 2 3
4 5 6
7 8 9
示例2
在这个方法中,我们使用slice库函数中的sort.Slice()函数来对2D数组中的列元素进行排序
package main
import (
"fmt"
"sort"
)
type byColumn [][]int
func (a byColumn) Len() int {
return len(a)
}
func (a byColumn) Swap(i, j int) {
a[i], a[j] = a[j], a[i]
}
func (a byColumn) Less(i, j int) bool {
return a[i][0] < a[j][0]
}
func main() {
arr := [][]int{{3, 2, 1}, {7, 9, 8}, {4, 6, 5}}
var rows int = len(arr)
var cols int = len(arr[0])
fmt.Println("The given 2D array to be sorted is:")
for i := 0; i < rows; i++ {
for j := 0; j < cols; j++ {
fmt.Print(arr[i][j], "\t")
}
fmt.Println()
}
sort.Sort(byColumn(arr))
fmt.Println()
fmt.Println("The given 2D array to be sorted is:")
for i := 0; i < rows; i++ {
for j := 0; j < cols; j++ {
fmt.Print(arr[i][j], "\t")
}
fmt.Println()
}
}
输出
The given 2D array to be sorted is:
3 2 1
7 9 8
4 6 5
The given 2D array to be sorted is:
3 2 1
4 6 5
7 9 8
结论
我们成功地编译和执行了一个使用main()和内部库函数对2D数组进行列排序的Go语言程序。