go数组详解:数组的定义、遍历、使用细节、二维数组的定义及其遍历
引入
【1】練習(xí)引入:
package main import "fmt" func main(){//實(shí)現(xiàn)的功能:給出五個(gè)學(xué)生的成績(jī),求出成績(jī)的總和,平均數(shù)://給出五個(gè)學(xué)生的成績(jī):score1 := 95score2 := 91score3 := 39score4 := 60score5 := 21//求和:sum := score1 + score2 + score3 + score4 + score5 //平均數(shù):avg := sum / 5//輸出fmt.Printf("成績(jī)的總和為:%v,成績(jī)的平均數(shù)為:%v",sum,avg) }缺點(diǎn):
成績(jī)變量定義個(gè)數(shù)太多,成績(jī)管理費(fèi)勁,維護(hù)費(fèi)勁 —》 將成績(jī)找個(gè)地方存起來(lái) —》 數(shù)組
—》存儲(chǔ)相同類型的數(shù)據(jù)
【2】數(shù)組解決練習(xí):
package main import "fmt" func main(){//實(shí)現(xiàn)的功能:給出五個(gè)學(xué)生的成績(jī),求出成績(jī)的總和,平均數(shù)://給出五個(gè)學(xué)生的成績(jī):--->數(shù)組存儲(chǔ)://定義一個(gè)數(shù)組:var scores [5]int//將成績(jī)存入數(shù)組:scores[0] = 95scores[1] = 91scores[2] = 39scores[3] = 60scores[4] = 21//求和://定義一個(gè)變量專門(mén)接收成績(jī)的和:sum := 0for i := 0;i < len(scores);i++ {//i: 0,1,2,3,4 sum += scores[i]}//平均數(shù):avg := sum / len(scores)//輸出fmt.Printf("成績(jī)的總和為:%v,成績(jī)的平均數(shù)為:%v",sum,avg) }總結(jié):
數(shù)組定義格式:
var 數(shù)組名 [數(shù)組大小]數(shù)據(jù)類型
例如:
var scores [5]int
賦值:
內(nèi)存分析
【1】代碼:
package main import "fmt" func main(){//聲明數(shù)組:var arr [3]int16//獲取數(shù)組的長(zhǎng)度:fmt.Println(len(arr))//打印數(shù)組:fmt.Println(arr)//[0 0 0]//證明arr中存儲(chǔ)的是地址值:fmt.Printf("arr的地址為:%p",&arr)//第一個(gè)空間的地址:fmt.Printf("arr的地址為:%p",&arr[0])//第二個(gè)空間的地址:fmt.Printf("arr的地址為:%p",&arr[1])//第三個(gè)空間的地址:fmt.Printf("arr的地址為:%p",&arr[2]) }運(yùn)行結(jié)果:
【2】?jī)?nèi)存分析:
PS : 數(shù)組每個(gè)空間占用的字節(jié)數(shù)取決于數(shù)組類型
【3】賦值內(nèi)存:(數(shù)組是值類型,在棧中開(kāi)辟內(nèi)存)
數(shù)組優(yōu)點(diǎn):訪問(wèn)/查詢/讀取 速度快
數(shù)組遍歷
【1】普通for循環(huán)
【2】鍵值循環(huán)
(鍵值循環(huán)) for range結(jié)構(gòu)是Go語(yǔ)言特有的一種的迭代結(jié)構(gòu),在許多情況下都非常有用,for range 可以遍歷數(shù)組、切片、字符串、map 及通道,for range 語(yǔ)法上類似于其它語(yǔ)言中的 foreach 語(yǔ)句,一般形式為:
注意:
(1)coll就是你要的數(shù)組
(2)每次遍歷得到的索引用key接收,每次遍歷得到的索引位置上的值用val
(3)key、value的名字隨便起名 k、v key、value
(4)key、value屬于在這個(gè)循環(huán)中的局部變量
(5)你想忽略某個(gè)值:用_就可以了:
代碼:
package main import "fmt" func main(){//實(shí)現(xiàn)的功能:給出五個(gè)學(xué)生的成績(jī),求出成績(jī)的總和,平均數(shù)://給出五個(gè)學(xué)生的成績(jī):--->數(shù)組存儲(chǔ)://定義一個(gè)數(shù)組:var scores [5]int//將成績(jī)存入數(shù)組:(循環(huán) + 終端輸入)for i := 0; i < len(scores);i++ {//i:數(shù)組的下標(biāo)fmt.Printf("請(qǐng)錄入第個(gè)%d學(xué)生的成績(jī)",i + 1)fmt.Scanln(&scores[i])}//展示一下班級(jí)的每個(gè)學(xué)生的成績(jī):(數(shù)組進(jìn)行遍歷)//方式1:普通for循環(huán):for i := 0; i < len(scores);i++ {fmt.Printf("第%d個(gè)學(xué)生的成績(jī)?yōu)?#xff1a;%d\n",i+1,scores[i])}fmt.Println("-------------------------------")//方式2:for-range循環(huán)for key,value := range scores {fmt.Printf("第%d個(gè)學(xué)生的成績(jī)?yōu)?#xff1a;%d\n",key + 1,value)} }運(yùn)行結(jié)果:
數(shù)組的定義
package main import "fmt" func main(){//第一種:var arr1 [3]int = [3]int{3,6,9}fmt.Println(arr1)//第二種:var arr2 = [3]int{1,4,7}fmt.Println(arr2)//第三種:var arr3 = [...]int{4,5,6,7}fmt.Println(arr3)//第四種:var arr4 = [...]int{2:66,0:33,1:99,3:88}fmt.Println(arr4) }數(shù)組的使用細(xì)節(jié)
【1】長(zhǎng)度屬于類型的一部分 :
【2】Go中數(shù)組屬值類型,在默認(rèn)情況下是值傳遞,因此會(huì)進(jìn)行值拷貝。
【3】如想在其它函數(shù)中,去修改原來(lái)的數(shù)組,可以使用引用傳遞(指針?lè)绞?。
二維數(shù)組的定義
【1】二維數(shù)組的定義,并且有默認(rèn)初始值:
【2】二維數(shù)組內(nèi)存:
【3】賦值操作:
【4】二維數(shù)組的初始化:
二維數(shù)組的遍歷
【1】普通for循環(huán)
【2】鍵值循環(huán)(for range)
代碼:
package main import "fmt" func main(){//定義二維數(shù)組:var arr [3][3]int = [3][3]int{{1,4,7},{2,5,8},{3,6,9}}fmt.Println(arr)fmt.Println("------------------------")//方式1:普通for循環(huán):for i := 0;i < len(arr);i++{for j := 0;j < len(arr[i]);j++ {fmt.Print(arr[i][j],"\t")}fmt.Println()}fmt.Println("------------------------")//方式2:for range循環(huán):for key,value := range arr {for k,v := range value {fmt.Printf("arr[%v][%v]=%v\t",key,k,v)}fmt.Println()} }總結(jié)
以上是生活随笔為你收集整理的go数组详解:数组的定义、遍历、使用细节、二维数组的定义及其遍历的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: go slice切片详解:定义、遍历、追
- 下一篇: 【网址收藏】kubebuiler中文文档