Go:切片、数组的常用函数

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         ]

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值