您好,登錄后才能下訂單哦!
**數組 Array**
數組是一種內建的類型,是一組同類型數據的集合,是一種值類型,可以通過從0開始的下標索引訪問元素值,在初始化后其長度就固定了,無法修改其長度,而且Array的長度也是其類型的一部分,可以通過其內置函數len(array)獲取其長度,當它作為方法的參數傳入時,將復制一份數組,而不是引用同一個指針。
初始化:
[5]int{1,2,3,4,5}???#長度為5的數組,其值分別為1,2,3,4,5
[5]int{1,2}???#長度為5的數組,其值分別為1,2,0,0,0?在初始化時,沒有指定初值的元素,int類型的默認為0,string類型默認為"",bool類型默認為false
[...]int{1,2,3,4,5}?#長度為5的數組,其長度由初始化時元素的個數決定
[5]int{2:1,3:2,4:3}?#長度為5的數組,key:value?,其值分別為0,0,1,2,3;?初始化時指定了2、3、4號索引的值分別為1,2,3
[...]int{2:1,4:3}?#長度為5的數組,其值分別為0,0,1,0,3,?長度為5(由元素個數決定)
賦值與使用:
package?main import?"fmt" func?test1(){ ????arr?:=?[...]int{1,2,3,4,5} ????arr[4]=arr[4]+len(arr) ????fmt.Println(len(arr)) ????fmt.Println(arr) } func?test2(){ ????arr2?:=?[...]int{2:3,3:1,4:0} ????for?index,?value?:=?range?arr2?{ ????????fmt.Printf("arr2[%d]?=?%d\n",index,value) ????} ????fmt.Println("-------------") ????for?index?:=?0;index<len(arr2);index++?{ ????????fmt.Printf("arr2[%d]?=?%d\n",index,arr2[index]) ????} } func?main(){ ????test1() ????test2() }
array 是值類型,將一個數組復制給另一個數組時,實際上是重新復制了一份元素集合。
func?test3(){ ????arr3?:=?[5]int{2,3} ????arr5?:=?arr3 ????arr3[3]=9 ????arr5[0]=1 ????fmt.Printf("arr3=%d\n?arr5=%d\n?arr5[0]==arr3[0]=%t",arr3,arr5,arr5[0]==arr3[0]) } func?main(){ ????//?test1() ????//?test2() ????test3() }
**切片 Slices**
數組的長度是不可變的,那么在特定的場景中這樣的集合就不適合了,于是golang提供了一種功能強悍的內置類型slices,相比于數組array,切片slices的長度是不固定的,可以追加元素,追加元素的時候可能是切片的容量增大。切片slices有兩個概念:一個是長度len,一個是容量cap。
初始化
切片可以通過數組來初始化,也可以通過內置函數make()初始化,初始化時len=cap,在追加元素時,當容量不足時,cap將按照len的2倍擴容。
s?:=?[]int{1,2,3}???#直接初始化切片,切片的初始值為1,2,3;len=cap=3
s?:=?arr[:]??#初始化切片s,是數組arr的引用
s?:=?arr[startIndex:endIndex]??#將arr中從下標startIndex到endIndex-1?下的元素創建為一個新的切片
s?:=?arr[startIndex:]???#缺省endIndex時將表示一直到arr的最后一個元素
s?:=?arr[:endIndex]???#缺省startIndex時將表示從arr的第一個元素開始
s1?:=?s[startIndex:endIndex]?#通過切片s,來初始化切片s1
s?:=make([]int,len,cap)????#通過內置函數make()初始化切片s,[]int?標識為其元素類型為int的切片
賦值與引用
package?main import?"fmt" func?main(){ ????s0?:=?[]int{1,2,3,4,5} ????s1?:=?s0[1:] ????fmt.Println("s1=",s1) ????s0[1]=1 ????fmt.Println(s1) ????arr?:=?[...]int{1,2,3,4,6} ????s2:=arr[:] ????fmt.Printf("arr=%d,?s2=%d\n",arr,s2) ????arr[3]=3 ????fmt.Printf("arr=%d,s2=%d\n",arr,s2) ????fmt.Println("s0=",s0,"s2=",s2,"arr=",arr) ????s2?=?append(s2,?s0...) ????s2?=?append(s2,?arr[:]...)?//追加數組元素 ????fmt.Println("s2=",?s2) ????s3?:=?append(s1,?7,?9,?11) ????fmt.Println("s3=",?s3) }
output
s1=?[2?3?4?5] [1?3?4?5] arr=[1?2?3?4?6],?s2=[1?2?3?4?6] arr=[1?2?3?3?6],s2=[1?2?3?3?6] s0=?[1?1?3?4?5]?s2=?[1?2?3?3?6]?arr=?[1?2?3?3?6] s2=?[1?2?3?3?6?1?1?3?4?5?1?2?3?3?6] s3=?[1?3?4?5?7?9?11]
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。