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