• Welcome to the world's largest Chinese hacker forum

    Welcome to the world's largest Chinese hacker forum, our forum registration is open! You can now register for technical communication with us, this is a free and open to the world of the BBS, we founded the purpose for the study of network security, please don't release business of black/grey, or on the BBS posts, to seek help hacker if violations, we will permanently frozen your IP and account, thank you for your cooperation. Hacker attack and defense cracking or network Security

    business please click here: Creation Security  From CNHACKTEAM

GO语言学习——切片三append()方法是给切片添加元素 扩展切片的容量 用copy()函数复制切片 删除切片中的元素


Recommended Posts

append()方法向切片添加元素。

注意:var声明的零值片可以直接用在append()函数中,不需要初始化。

var s []int

s=append(s,1,2,3)

append()函数将元素附加到切片的末尾,并返回切片。

numSlice的容量会根据1、2、4、8和16的规则自动扩展。每次扩张后都是之前的两倍。

切片的扩展策略

检查go root/src/runtime/slice . go源代码

主包装

导入' fmt '

//append()将元素追加到切片中。

func main(){

S1 :=[]string{ '北京','上海','深圳' }

fmt。printf(' s1=% v len(s1)=% d cap(s1)=% d \ n ',S1,len(S1),cap(S1))

//s1[3]='广州'//写错会导致编译错误:索引越界。

//fmt。Println(s1) //索引超出范围[3],长度为3

//调用append函数必须接收带有原始切片变量的返回值。

//append追加元素当原来的底层数组装不下时,Go语言会把底层数组换成另一个。

//必须接收追加变量的返回值

fmt。Println(s1)

S1=追加(S1,'广州')

fmt。printf(' s1=% v len(s1)=% d cap(s1)=% d \ n ',S1,len(S1),cap(S1))

S1=追加(S1,'杭州','成都')

fmt。printf(' s1=% v len(s1)=% d cap(s1)=% d \ n ',S1,len(S1),cap(S1))

Ss :=[]string{ '武汉',' Xi '安','苏州' }

S1=追加(S1,ss.) //.意思是打开。

fmt。printf(' s1=% v len(s1)=% d cap(s1)=% d \ n ',S1,len(S1),cap(S1))

}

使用copy()函数复制切片。

copy()函数的格式:

copy(destSlice,srcSlice []T)

其中包括:

SrcSlice:数据源切片

DestSlice:目标切片

从切片中删除元素

主包装

导入' fmt '

//About append删除切片中的元素

func main(){

a1 :=[.]int{1,3,5,7,9,11,13,15,17}

s1 :=a1[:]

//删除索引为1的3

s1=append(s1[0:1],s1[2:].)

fmt。Println(s1) //[1 5 7 9 11 13 15 17]

fmt。Println(a1) //[1 5 7 9 11 13 15 17 17]

}

切片不存储值;基础数组存储值。

主包装

导入' fmt '

//复制

func main() {

a1 :=[]int{1,3,5}

a 23360=A1//分配

//var a3 []int //nil

var a3=make([]int,3,3)

copy(a3,a1) //复制

fmt。Println(a1,a2,a3)

a1[0]=100

fmt。Println(a1,a2,a3)

//删除a1内索引为1的元素3

a1=append(a1[:1],a1[2:].)

fmt。Println(a1)

fmt。Println(第a1章)

X1 :=[.]int{1,3,5} //array

s1 :=x1[:]

fmt。Println(s1,len(s1),cap(s1))

//1.切片不保存特定的值。

//2.切片对应于基础数组。

//3.基础数组都占用一个连续的内存。

fmt。Printf('%p\n ',s1[0])

S1=追加(S1 [33601],S1 [23360].)//底层数组已经被修改!

fmt。Printf('%p\n ',s1[0])

fmt。Println(s1,len(s1),cap(s1))

//?

//s1[0]=100 //修改底层数组

fmt。Println(x1) //[1 5 5]

}

练习

主包装

导入(

' fmt '

'排序'

)

//切片练习

func main() {

Var=make ([] int,5,10)//创建一个长度为5、容量为10的切片。

fmt。println(a)//[0 0 0 0]

对于I :=0;i 10我{

a=append(a,I)

}

fmt。println(a)//[0 0 0 0 0 1 2 3 4 5 6 7 8 9]

fmt。Println(第a章)

//排序排序

var a1=[.]int{3,7,8,9,1}

Sort . ints(A1[3360])//对切片进行排序

fmt。Println(a1)

}

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now