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

golang中slice切片的修改操作

发布时间:2020-12-16 18:56:24 所属栏目:大数据 来源:网络整理
导读:本文主要介绍go语言中切片slice的增删修改操作。 如果我们需要往切片中追加元素,可以使用内置的append()函数。这个函数接受一个需要被追加的切片,以及一个或者多个需要被追加的元素。如果我们需要往一个切片中追加另一个切片,那么我们必须使用...操作符来

本文主要介绍go语言中切片slice的增删修改操作。

如果我们需要往切片中追加元素,可以使用内置的append()函数。这个函数接受一个需要被追加的切片,以及一个或者多个需要被追加的元素。如果我们需要往一个切片中追加另一个切片,那么我们必须使用...操作符来告诉Go语言将被添加进来的切片当成多个元素。例:


s := []string{"A","B","C","D","E","F","G"}
t := []string{"K","L","M","N"}
u := []string{"m","n","o","p","q","r"}
s = append(s,"h","i","j") //添加单一的值
s = append(s,t...) //添加切片中的所有值
s = append(s,u[2:5]...) //添加一个子切片
b := []byte{'U','V'}
letters := "WXY"
b = append(b,letters...) //将一个字符串字节添加进一个字节切片中
fmt.Printf("%vn%sn",s,b)
//--------------结果----------------------
[A B C D E F G h i j K L M N o p q]
UVwxy


有时我们不仅想往切片的末尾插入项,也想往切片的前面或者中间插入项。下面的例子使用了我们自定义的 Insert() 函数,它接收一个我们要插入切片的参数、一个用于插入的切片以及需插入切片的索引位置:


func Insert(slice,insertion []interface{},index int) []interface{} {
    result := make([]interface{},len(slice)+len(insertion))
    at := copy(result,slice[:index])
    at += copy(result[at:],insertion)
    copy(result[at:],slice[index:])
    return result
}

注意,如果所传入的索引位置为0,那么第一条语句中的slice[:index]为slice[:0],因此无需进行复制。类似的,如果所传入的索引位置大于等于切片的长度,则最后一条复制语句为slice[len(slice):](即一个空切片),因此也无需复制。

使用Go语言的标准切片语法可以将元素从切片的开头和末尾删除,但是将其从中间删除就费点事儿了。看看下面的例子,分别描述如何从开头,从末尾,从中间删除切片元素:

s := []string{"A","G"}
s = s[2:] //从开始处删除是s[:2]子切片
e := []string{"A","G"}
e = e[:4] //从末尾处删除是e[4:]子切片


func Remove(slice []interface{},start,end int) []interface{} {
    result := make([]interface{},len(slice)-(end-start))
    at := copy(result,slice[:start])
    copy(result[at:],slice[end:])
    return result
}
//--------------------另一种更为简便的写法-----------------------
func Remove(slice []interface{},end int) []interface{} {
    return append(slice[:start],slice[end:]...)
}

(编辑:李大同)

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

    推荐文章
      热点阅读