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