如何在Go中創建一個數組數組?創建一個多維數組
Q
創建一個多維數組
2
A
回答
7
大廈@Kevin伯克的回答,嚴格地說
a := [][]byte{{1, 2}, {3, 4}}
fmt.Println("Array of Arrays")
a := [2][2]int{{0, 1}, {2, 3}}
for i := 0; i < 2; i++ {
for j := 0; j < 2; j++ {
fmt.Printf("a[%d][%d] = %d at %p\n", i, j, a[i][j], &a[i][j])
}
}
fmt.Println("Slice of Slices")
b := [][]int{{0, 1}, {2, 3}}
for i := 0; i < 2; i++ {
for j := 0; j < 2; j++ {
fmt.Printf("b[%d][%d] = %d at %p\n", i, j, b[i][j], &b[i][j])
}
}
內部數組的數組是內存只是一個連續比特所以它是非常有效的,而切片的切片是更復雜的。每個子片可以是不同的大小,並分配在不同的地方。片頭佔用額外的RAM並使用額外的間接訪問。
例如creating 100,000 3x3 array of arrays用盡了5.03 MB的RAM,而creating 100,000 3x3 slices of slices用盡了13.79 MB的RAM。
一片切片更加靈活 - 每一行可以有不同的大小,但如果你只是想要一個2x2矩陣,那麼一組數組是一個更好的選擇。
另一個區別是切片是引用類型 - 如果您將切片傳遞給某個函數,則會更改函數中的原始切片。數組不是 - 如果你將一個函數傳遞給一個函數,你將會製作一個可能很慢的副本,或者可能是你想要的副本。如果你想修改它,然後傳遞一個指針。
func f1(a [2][2]int) {
fmt.Println("I'm a function modifying an array of arrays argument")
a[0][0] = 100
}
func f2(b [][]int) {
fmt.Println("I'm a function modifying an slice of slices argument")
b[0][0] = 100
}
func main() {
fmt.Println("Array of arrays")
a := [2][2]int{{0, 1}, {2, 3}}
fmt.Printf("Before %v\n", a)
f1(a)
fmt.Printf("After %v\n\n", a)
fmt.Println("Slice of slices")
b := [][]int{{0, 1}, {2, 3}}
fmt.Printf("Before %v\n", b)
f2(b)
fmt.Printf("After %v\n", b)
}
它打印
Array of arrays
Before [[0 1] [2 3]]
I'm a function modifying an array of arrays argument
After [[0 1] [2 3]]
Slice of slices
Before [[0 1] [2 3]]
I'm a function modifying an slice of slices argument
After [[100 1] [2 3]]
一般爲一分維的東西,片是幾乎總是比數組更好。然而,對於固定大小的多維數組,數組數組是更好的選擇。
6
使用嵌套括號:
a := [][]byte{{1, 2}, {3, 4}}
相關問題
- 1. 創建一個多維數組
- 2. 如何創建一個多維數組
- 3. 從多個多維數組中創建一個數組php
- 4. PHP創建多維數組
- 5. 創建多維數組
- 6. 創建多維數組PHP
- 7. PHP「多維」數組創建
- 8. 創建多維數組
- 9. PHP創建多維數組
- 10. 多維數組創建
- 11. 從創建多維數組
- 12. 創建多維數組
- 13. 創建多維數組,
- 14. Rails:從多維數組創建一維數組
- 15. 如何從Ruby中的一維數組創建一個多維數組?
- 16. 劃分一個數組以創建多維數組
- 17. 拆分數組並創建一個多維數組
- 18. 一格創建一個二維數組
- 19. 在一個循環中創建一個多維數組php
- 20. PHP從一個mysql Row的列創建一個多維數組?
- 21. 從數組創建多維數組
- 22. 從數組創建多維數組
- 23. 創建構建了一個多維數組
- 24. 用2個一維數組創建2維數組
- 25. 紅寶石創建一個維數組,二維數組
- 26. 創建一個動態二維數組
- 27. 創建一個二維數組
- 28. 如何創建一個用於拼合數組的函數?多維數組一個維數組在Javascript
- 29. 構建一個多維數組
- 30. 建立一個遞歸函數來創建一個多維數組