您好,登錄后才能下訂單哦!
數組的容量和長度是i樣的,cap()函數和len()函數均輸出數組的容量(即長度) package main
import "fmt"
func main() {
a := [5]int{6, 7, 8, 9, 10}
fmt.Println(len(a))
fmt.Println(cap(a))
}
切片
-本身并不是數組,它指向底層的數組
-作為變長數組的替代方案,可以關聯底層數組的局部或全部
-為引用類型
-使用len()獲取元素的個數,cap()獲取容量
-一般使用make()創建
-如果多個slice指向相同底層數組,其中一個的值改變會影響全部
-make([]T,len,cap)
-其中cap 可以省略,則和len的值相同
package main
import "fmt"
func main(){
var s1[10]int
s1:=[10]int{1,2,3,4,5,6,7,8,9}
fmt.Println(s1)
s2 :=s1[:9]
s3 :=s1[4:8] //包含開始不包含結束
fmt.Println(s2)
}
使用make聲明數組
s1 :=make([]int,3,9)
package main
import "fmt"
func main(){
s1 :=make([]int,3,10)
fmt.Println(s1)
}
--從一個slice取出一個新的slice
Reslice:從一個slice取出一個新的slice
Reslice時索引被slice的切片為準
索引不可以超過被slice的切片的容量cap()值
索引越界不會導致底層數組的重新分配而是引發錯誤
Append
可以在slice尾部追加元素
可以將一個slice追加在另一個slice尾部
如果最終未超過追加到slice的容量則返回原始slice//內存地址沒有改變
如果超過追加到的slice的容量則將重新分配數組并拷貝原始數據//重新分配內存地址
package main
import "fmt"
func main(){
s1 :=make([]int,3,6)
fmt.Println("%v %p\n",s1,s1)
s1=append(s1,1,2)
fmt.Println("%v %p\n",s1,s1)
}
Copy
package main
import "fmt"
func main(){
s1 :=[]int{1,2,3,4,5,6,7}
s2 :=[]int{7,8,9}
copy(s1,s2) //s2的內容拷貝到s1中去,短的數組拷貝到長的數組,改變長的幾個
fmt.Println(s1)
}
package main
import "fmt"
func main(){
s1 :=[]int{1,2,3,4,5,6,7}
s2 :=[]int{7,8,9}
copy(s2,s1) //長的數組拷貝到短的數組中去,只會匹配短的個數長度
fmt.Println(s2)
}
package main
import "fmt"
func main(){
s1 :=[]int{1,2,3,4,5,6,7}
s2 :=[]int{7,8,9}
copy(s2[2:2],s1[1:3])//拷貝到s2的指定并覆蓋原有的數據
fmt.Println(s2)
}
package main
import "fmt"
func main(){
s1 :=[]int{1,2,3,4,5,6,7,1,1,1}
s2 :=[]int{7,8,9,11,22,33,44,55,66,77,88}
copy(s2[10:],s1[1:3])//拷貝到s2的指定并覆蓋原有的數據.若復制的值超過被復制的數組,只會留下部分復制的數據,s1的值只會在s2留下一個
fmt.Println(s2)
fmt.Println(s1[1:3])
}
##遍歷、修改切片
package main
import "fmt"
func main() {
slice0 := []string{"a", "b", "c", "d", "e", "f"}
fmt.Printf("\n*****元素遍歷*****")
for _, value := range slice0 {
fmt.Println(value, " ")
}
fmt.Println("\n*****索引遍歷******")
for index := range slice0 {
fmt.Println(index, slice0[index])
}
fmt.Println("\n******元素索引共同使用******")
for index, value := range slice0 {
fmt.Println(value, slice0[index])
}
fmt.Println("\n******修改******")
for index := range slice0 {
slice0[index] = "9"
}
fmt.Println(slice0)
}
###注意:使用 “_” 則表示忽略,因為go語言中,未使用的值會導致編譯錯誤,只有一個元素時,該元素代表索引,在元素遍歷中,是不能直接修改,主要是因為值傳遞,為該切片元素的副本,修改它不會影響原本值,只有修改的是該切片的元素引用的值,才可以修改
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。