內(nèi)容太多了冕末。本次先更新數(shù)組。
數(shù)組的概念侣颂,其實和numpy有的一拼档桃。基本上是array的操作憔晒。在單類型的數(shù)組中藻肄,軟拷貝類似于python的概念。
package main
import ("fmt")
func main() {
//*數(shù)組*
//和numpy的概念很類似拒担。其中嘹屯,數(shù)組是一組數(shù)據(jù)類型一樣的元素的集合。占用的內(nèi)存是連續(xù)分配
//數(shù)組可以用下標(biāo)來進行索引
//*初始化數(shù)組*
var arr [5]int //長度為5从撼,的int類型數(shù)組州弟,
fmt.Println(arr) //初始化后,每個元素都是0. //[0 0 0 0 0]
arr2 :=[5]int{10,20,30,40}
fmt.Println(arr2) //[10 20 30 40 0] 沒有聲明的元素低零,用0表示
//不聲明長度的話婆翔,Go會自動填充長度。[...]表示
arr3 := [...]int{10,20,40,60,70}
fmt.Println(len(arr3)) //5
//還可以只聲明某幾個角標(biāo)的元素
arr4 := [5]int{2:10,4:25}
fmt.Println(arr4) //[0 0 10 0 25]
//*使用數(shù)組*
arr5 := [...]int{10,20,30,40,50}
fmt.Println(arr5[3])
//修改元素
arr5[4] = 60
fmt.Println(arr5) //[10 20 30 40 60]
//*指針數(shù)組*
//其實就是指針的數(shù)組毁兆。聲明一個所有元素都是“指針”的數(shù)組浙滤。使用*就可以訪問元素指針?biāo)赶虻闹? // 聲明包含 5 個元素的指向整數(shù)的數(shù)組
// 用整型指針初始化索引為 0 和 1 的數(shù)組元素
arr6 :=[5]*int{0:new(int),1:new(int)}
*arr6[0] =10
*arr6[1] =20
fmt.Println(arr6) // [0xc00000a0b8 0xc00000a0e0 <nil> <nil> <nil>]
//可以看到 0xc00000a0b8 和 0xc00000a0e0 并不是10和20,這是內(nèi)存中的地址指針。定義過后的地址指針是由內(nèi)存中的地址的气堕,而沒有定義的纺腊,則是空nil
// 如何看到內(nèi)存地址為0xc00000a0b8和0xc00000a0e0所指向的值是什么呢?
fmt.Println(*arr6[1]) //20
//*賦值操作*
//賦值有2中方法:第一種是 arr1= arr2茎芭,第二種是 arr1= copy arr2
//第一種方法中揖膜,只有相同的地方才能全部賦值
arr7 := [4]string{}
arr8 := [...]string{"red","blue","green","yellow"}
arr7 = arr8
fmt.Println(arr7)
//在沒有聲明arr7的長度時,arr7 := []string{},或者arr7和arr8的長度不一致時梅桩,賦值操作會報錯:cannot use arr8 (type [4]string) as type []string in assignment
//因此要修改arr7 :=[4]string{}
//指針數(shù)組賦值給另一個
// 聲明第一個包含 3 個元素的指向字符串的指針數(shù)組
arr9 := [3]*string{}
arr10 :=[3]*string{new(string),new(string),new(string)}
*arr10[0]= "red"
*arr10[1]= "blue"
*arr10[2]= "green"
arr9 = arr10
fmt.Println(arr9) //[0xc00003c1f0 0xc00003c200 0xc00003c210]
fmt.Println(arr10) //[0xc00003c1f0 0xc00003c200 0xc00003c210]
fmt.Println(*arr9[2])
//*多維數(shù)組*
arra1 :=[3][4]int{} //3行4列
fmt.Println(arra1) //[[0 0 0 0] [0 0 0 0] [0 0 0 0]]
arra2 := [4][2]int{1: {0: 20}, 3: {1: 41}}
fmt.Println(arra2) //[[0 0] [20 0] [0 0] [0 41]]
}
輸出結(jié)果
"C:\Program Files\JetBrains\GoLand 2020.1.3\go1.15.6\go\bin\go.exe" build -o
[0 0 0 0 0]
[10 20 30 40 0]
5
[0 0 10 0 25]
40
[10 20 30 40 60]
[0xc00000a0b8 0xc00000a0e0 <nil> <nil> <nil>]
20
[red blue green yellow]
[0xc00003c1f0 0xc00003c200 0xc00003c210]
[0xc00003c1f0 0xc00003c200 0xc00003c210]
green
[[0 0 0 0] [0 0 0 0] [0 0 0 0]]
[[0 0] [20 0] [0 0] [0 41]]