007.golang 切片slice
发布时间:2020-12-16 19:18:31 所属栏目:大数据 来源:网络整理
导读:切片Slice 其本身并不是数组,它指向底层的数组 作为变长数组的替代方案,可以关联底层数组的局部或全部 为引用类型 可以直接创建或从底层数组获取生成 使用len()获取元素个数,cap()获取容量 一般使用make()创建 如果多个slice指向相同底层数组,其中一个的
切片Slice
package main
import (
"fmt"
)
func main() {
//空的slice
var s1 []int
fmt.Println(s1)
//创建一个数组
a := [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
fmt.Println(a)
//获取索引从5到9的元素
s2 := a[5:10] //包含开始索引,不包含结束索引
fmt.Println(s2)
//获取第七个以后所有的元素
s3 := a[7:]
fmt.Println(s3)
//获取刚开始的前三个元素
s4 := a[:3]
fmt.Println(s4)
//获取数组的所有元素 等价于 =
s5 := a[:]
s6 := a
fmt.Println(s5)
fmt.Println(s6)
}
package main
import (
"fmt"
)
func main() {
//表示此切片初始容量为3,
//可以容纳为10
//如果超过10就会自动扩容+10
s1 := make([]int, 10)
fmt.Println(s1)
fmt.Println(len(s1),cap(s1))
a := []byte{'a','b','c','d','.','w','r','v','4','3','2'}
s2 := a[2:4]
fmt.Println(string(s2))
}
Reslice
package main
import (
"fmt"
)
func main() {
a := []byte{'a','2'}
s2 := a[2:4]
s3 := s2[1:2]
s4 := s2[1:8]
fmt.Println(string(s2))
fmt.Println(string(s3))
fmt.Println(string(s4))
}
Append
package main
import (
"fmt"
)
func main() {
s1 := make([]int, 6)
fmt.Printf("%pn",s1)
s1 = append(s1, 1, 3)
fmt.Printf("%v %pn",s1,s1)
}
package main
import (
"fmt"
)
func main() {
a := []int{1, 5}
fmt.Println(a)
//指向底层的数组
s1 := a[2:5]
s2 := a[1:3]
s3 := a[1:3]
fmt.Println(s1,s2)
//如果超过追加到的slice的容量则将重新分配数组并拷贝原始数据
s3 = append(s3, 1)
//更改元素后,底层数组相应的也会更改
s1[0] = 9
fmt.Println(s1,s2)
fmt.Println(s3)
fmt.Println(a)
}
Copypackage main
import (
"fmt"
)
func main() {
s1 := []int{1, 6}
s2 := []int{7, 9}
s3 := []int{7, 9}
copy(s2,s1)
copy(s1,s3)
fmt.Println(s2)
fmt.Println(s1)
}
package main
import (
"fmt"
)
func main() {
s1 := []int{1, 10, 11}
copy(s2[2:4],s1[4:6])
fmt.Println(s2)
} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |