目录
- 1.初始化
-
- 2.遍历
- 3.追加
- 4.删除
- 5.插入
- 6. 复制
1.初始化
切片(引用类型,按地址赋值)
arr2 := []int{2,4,6} //1
var arr2 = []int{2,4,6} //2
var arr2[]int = [3]int{2,4,6} //3
var arr2 []int //4
arr2=[]int{1,3,5}
slice1 := make([]type, len) //5
//also add parameter capacity
//make([]T, length, capacity)
var slice1 []type = make([]type, len) //6
//注意点1
//切片不能直接比较
//切片的唯一比较操作时和nil比较 一个为nil值切片没有底层数组 一个nil值切片的长度和容量都是0
//但我们不能说长度和容量都是0的切片一定是nil,判断切片是否为空 用len(s0)=0 不应该 s0=nil
var s4 []int //len(s4)=0 cap(s4)=0 s4=nil
s5 := []int{} //len(s5)=0 cap(s5)=0 s5!=nil
s6 := make([]int, 0) //len(s6)=0 cap(s6)=0 s6!=nil
//注意点2
//什么时候不再相互影响呢?那就是这两个切片的任意一个的cap扩充时,Go会为了给切片分配新的内存,
//从这一刻起两个切片在内存上才正式脱离共享关系
s7 := []int{1, 3, 5} //这是把数组封装成切片
s8 := s7 // s7和s8都指向了同一个底层数组
fmt.Println(s7, s8) //[1 3 5] [1 3 5]
s7[0] = 1000
fmt.Println(s7, s8) //[1000 3 5] [1000 3 5]
数组(按值赋值)
arr2 := [3]int{2,4,6} //1
arr2 :=[...]int{1,3,7}//2
var arr2 = [3]int{2,4,6} //3
var arr2 [3]int = [3]int{2,4,6} //4
var arr2 [3]int //5
arr2=[3]int{1,3,5}
var arr2 [3]int //6
var i int
for i=0;i<len(arr2);i++{
arr2[i] = 10+i;
}
//注意点1:
var arr2[3]int = [3]int{2,4,6}
var arr1 = arr2
fmt.Println(arr1, arr2) //[2 4 6] [2 4 6]
arr1[1]=11
fmt.Println(arr1, arr2) //[2 11 6] [2 4 6]
2.遍历
s7 := []int{1000, 3, 5}
//1.索引遍历
for i := 0; i < len(s7); i++ {
//索引 值
fmt.Println(s7[i]) // 0 1000
// 1 3
} // 2 5
//2.for range
for a, b := range s7 { //索引 值
fmt.Println(a, b) // 0 1000
} // 1 3
// 2 5
3.追加
//追加
var car [ ] string
car = append(car,"hello")//单个添加
car = append(car,"world","and","go","!")//多个添加
carComponent:=[ ]string{"aaaaaaa","bbbbbb"} //声明切片
car = append(car,carComponent...) //添加切片
//为切片 a 扩展 j 个元素长度
a = append(a, make([]Type, j)...)
4.删除
//删除位于索引 i 的元素
a = append(a[:i], a[i+1:]...)
//切除切片 a 中从索引 i 至 j 位置的元素
a = append(a[:i], a[j:]...)
//取出位于切片 a 最末尾的元素 x
x, a = a[len(a)-1], a[:len(a)-1]
5.插入
//在索引 i 的位置插入元素 x
a = append(a[:i], append([]T{x}, a[i:]...)...)
//在索引 i 的位置插入长度为 j 的空白新切片
a = append(a[:i], append(make([]T, j), a[i:]...)...)
//在索引 i 的位置插入切片 b 的所有元素
a = append(a[:i], append(b, a[i:]...)...)
6. 复制
//复制切片 a 的元素到新的切片 b 上
a:=[ ]string{"aaaaaaa","bbbbbb"}
b := make([]string,11)
// 将数据复制到新的切片空间中
copy(b, a)
fmt.Println(a, b) //[aaaaaaa bbbbbb] [aaaaaaa bbbbbb ]
a[1]="ccccccc"
fmt.Println(a, b) //[aaaaaaa ccccccc] [aaaaaaa bbbbbb ]
b[1]="dddddddd"
fmt.Println(a, b) //[aaaaaaa ccccccc] [aaaaaaa dddddddd ]