golang中slice切片的修改操作

前端之家收集整理的这篇文章主要介绍了golang中slice切片的修改操作前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

本文主要介绍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("%v\n%s\n",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:]...)
}

猜你在找的Go相关文章