Golang 跨列对二维数组排序

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语言程序。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程