一、創建二維數組
在Go中,二維數組可以使用多個一維數組來表示。我們可以使用以下代碼來創建一個簡單的二維數組:
array := [3][3]int{{1,2,3},{4,5,6},{7,8,9}}
這將創建一個包含9個元素的二維數組。
我們也可以使用for循環來創建一個動態大小的二維數組。以下是一個示例代碼:
var rows, cols int = 3, 3 var arr = make([][]int, rows) for i := 0; i < rows; i++ { arr[i] = make([]int, cols) for j := 0; j < cols; j++ { arr[i][j] = i + j } }
此代碼將創建一個3行3列的二維數組,並將每個元素設置為行索引和列索引之和。
二、遍歷二維數組
我們可以使用嵌套循環來遍歷二維數組:
for i := 0; i < rows; i++ { for j := 0; j < cols; j++ { fmt.Print(arr[i][j], " ") } fmt.Println() }
此代碼將打印出二維數組的所有元素。
三、使用切片創建二維數組
在Go中,我們也可以使用切片來創建二維數組。以下是一個示例代碼:
slice := [][]int{{1,2},{3,4},{5,6}}
這將創建一個包含6個元素的二維切片。
我們還可以使用for循環來創建一個動態大小的二維切片:
var rows, cols int = 3, 2 slice := make([][]int, rows) for i := range slice { slice[i] = make([]int, cols) for j := range slice[i] { slice[i][j] = i + j } }
此代碼將創建一個3行2列的二維切片,並將每個元素設置為行索引和列索引之和。
四、二維數組的性能
在Go中,二維數組的性能通常比切片要好。這是因為在二維數組中,所有的元素都是在連續的內存位置上分配的,這使得它們更容易被緩存和預取。而在切片中,每個元素都是單獨分配的,它們可能不會被緩存或預取。
以下是一個簡單的基準測試,比較二維數組和切片:
func BenchmarkArray(b *testing.B) { var arr [1000][1000]int for n := 0; n < b.N; n++ { for i := range arr { for j := range arr[i] { arr[i][j] = i + j } } } } func BenchmarkSlice(b *testing.B) { var slice [][]int for n := 0; n < b.N; n++ { for i := 0; i < 1000; i++ { row := make([]int, 1000) for j := range row { row[j] = i + j } slice = append(slice, row) } } }
在我的機器上運行該基準測試,結果表明二維數組比切片要快得多。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/151747.html