加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Golang 如何在切片尾部追加元素,又如何删除切片指定索引的元素,

发布时间:2020-12-16 18:11:15 所属栏目:大数据 来源:网络整理
导读:package main import ( "fmt" ) func main() { //1. 声明字符串类型的切片变量,go自动初始化为nil,长度:0,地址:0 var ss []string fmt.Printf("length:%v taddr:%p tisnil:%v",len(ss),ss,ss == nil) //2. 切片尾部追加元素 for i := 0; i 10; i++ {

package main


import (
"fmt"
)

func main() {
//1. 声明字符串类型的切片变量,go自动初始化为nil,长度:0,地址:0
var ss []string
fmt.Printf("length:%v taddr:%p tisnil:%v",len(ss),ss,ss == nil)
//2. 切片尾部追加元素
for i := 0; i < 10; i++ {
ss = append(ss,fmt.Sprintf("key%d",i))
}
fmt.Printf("n切片尾部追加元素:%s",ss)
fmt.Printf("nlength:%v taddr:%p tisnil:%v",ss == nil)
//3. 删除切片指定索引的元素
index := 3
ss = append(ss[:index],ss[index+1:]...)
fmt.Printf("n删除切片指定索引的元素:%s",ss == nil)
//4. 在切片中间插入元素,注意保存后面一部分的元素,必须新建一个临时temp切片
index = 5
temp := append([]string{},ss[index:]...)
ss = append(ss[:index],"key999")
ss = append(ss,temp...)
fmt.Printf("n在切片中间插入元素:%s",ss == nil)
}

调试控制台输出以下信息:

2017/06/30 18:50:46 server.go:73: Using API v1
2017/06/30 18:50:46 debugger.go:97: launching process with args: [/root/code/go/src/contoso.org/book/debug]
API server listening at: 127.0.0.1:2345
2017/06/30 18:50:46 debugger.go:505: continuing
length:0 addr:0x0 isnil:true
切片尾部追加元素:[key0 key1 key2 key3 key4 key5 key6 key7 key8 key9]
length:10 addr:0xc42008e000 isnil:false
删除切片指定索引的元素:[key0 key1 key2 key4 key5 key6 key7 key8 key9]
length:9 addr:0xc42008e000 isnil:false
在切片中间插入元素:[key0 key1 key2 key4 key5 key999 key6 key7 key8 key9]
length:10 addr:0xc42008e000 isnil:false


切片之间的复制范例:

package main

import (
"fmt"
)

func main() {
//源切片src的大小是0,使用append动态扩容到16,大小增加到10
var src = make([]string,0)
for i := 0; i < 10; i++ {
src = append(src,fmt.Sprintf("k%v",i))
}
fmt.Printf("src(length=%d)tcap=%dt%vn",len(src),cap(src),src)
//要保证目标切片dst有足够的大小,注意是大小0,而不是容量10,显然目标切片dst的大小为0,一个元素也别想被拷贝进去
var dst = make([]string,10)
var copied = 0
copied = copy(dst,src)
fmt.Printf("copy to dst(length=%d)tcopied=%dt%vn",len(dst),copied,dst)
//目标切片dst的大小为5
dst = make([]string,5)
copied = copy(dst,dst)
//目标切片dst的大小为10
dst = make([]string,10)
copied = copy(dst,dst)
}

调试控制台输出以下信息:

2017/06/30 18:58:18 server.go:73: Using API v1
2017/06/30 18:58:18 debugger.go:97: launching process with args: [/root/code/go/src/contoso.org/book/debug]
API server listening at: 127.0.0.1:2345
2017/06/30 18:58:18 debugger.go:505: continuing
src(length=10) cap=16 [k0 k1 k2 k3 k4 k5 k6 k7 k8 k9]
copy to dst(length=0) copied=0 []
copy to dst(length=5) copied=5 [k0 k1 k2 k3 k4]
copy to dst(length=10) copied=10 [k0 k1 k2 k3 k4 k5 k6 k7 k8 k9]


切片容量的扩容规则:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读