Go語言程式:按列排序二維陣列


什麼是 Go 語言中的二維陣列?

在 Go 程式語言中,二維陣列是一個數組的陣列,其中外部陣列的每個元素本身都是一個簡單的陣列。宣告一個大小為 2 X 3 的二維陣列的程式碼可以透過編寫 var array [2][3] 來完成。需要注意的是,二維陣列具有固定的大小,並且一旦建立,其大小就無法更改。如果您需要一個動態的二維陣列,可以使用切片的切片。

以下是如何按列排序二維陣列的示例:

輸入

3	2	1	
6	4	5	
8	9	7

輸出

1	2	3	
4	5	6	
7	8	9

方法 1:使用 For 迴圈

在此方法中,我們將使用 Go 語言程式中的“for”迴圈,這將幫助我們按列排序二維陣列。

演算法

  • 步驟 1 − 首先,我們需要匯入 fmt 包。

  • 步驟 2 − 然後,啟動 main() 函式。在 main() 函式內部,初始化一個包含要排序的元素的二維整數陣列。使用 for 迴圈和 fmt.Println() 函式在螢幕上列印陣列。

  • 步驟 3 − 要排序元素,請在另一個迴圈內使用三個 for 迴圈。前兩個 for 迴圈用於遍歷二維陣列,而第三個 for 迴圈用於選擇迴圈的特定元素並將其放置在相應的位置。

  • 步驟 4 − 如果陣列的當前元素大於下一個元素,則我們需要交換元素的位置,否則我們必須繼續迴圈。

  • 步驟 5 − 一旦遍歷了迴圈的每個元素,我們收到的結果陣列將按升序排序。現在,我們可以使用 fmt.Println() 函式在螢幕上列印這些陣列的元素。

示例

以下是一個使用“for”迴圈按列排序二維陣列的 Go 語言程式

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:使用內部函式

在此方法中,我們將使用內部函式來排序二維陣列的元素。

語法

func len(v Type) int

len() 函式用於獲取任何引數的長度。它將要查詢長度的資料型別變數作為引數,並返回一個整數,該整數是變數的長度。

func Ints(slc []int)

Ints() 函式位於 sorts 包中,用於對特定整數陣列進行排序。該函式接受要排序的切片作為引數,並在對切片的元素進行排序後返回最終的切片。

type Slice []int

Slice() 函式位於 sort 包中。此函式用於將介面的方法附加到 int 陣列,以便可以按升序對其進行排序。

演算法

  • 步驟 1 − 首先,我們需要匯入 fmt 包。

  • 步驟 2 − 然後,啟動 main() 函式。在 main() 函式內部,初始化一個包含要排序的元素的二維整數陣列。使用 for 迴圈和 fmt.Println() 函式在螢幕上列印陣列。

  • 步驟 3 − 要排序元素,請使用 for 迴圈。for 迴圈用於遍歷二維陣列,並在每次迭代中將元素傳遞給 sort 包中的 Ints() 函式。

  • 步驟 4 − 一旦遍歷了迴圈的每個元素,我們收到的結果陣列將按列升序排序。現在,我們可以使用 fmt.Println() 函式在螢幕上列印這些陣列的元素。

示例 1

在以下示例中,我們使用 sort.Ints() 在 Go 程式設計中按列排序二維陣列

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

在此方法中,我們使用來自切片庫函式的 sort.Slice() 函式按列元素對二維陣列進行排序

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

結論

我們已經成功編譯並執行了一個 Go 語言程式,使用 main() 和內部庫函式按列排序二維陣列。

更新於:2023年2月16日

1K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.