本文主要介绍go语言中切片slice的增删修改操作。
如果我们需要往切片中追加元素,可以使用内置的append()函数。这个函数接受一个需要被追加的切片,以及一个或者多个需要被追加的元素。如果我们需要往一个切片中追加另一个切片,那么我们必须使用...操作符来告诉Go语言将被添加进来的切片当成多个元素。例:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
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() 函数,它接收一个我们要插入切片的参数、一个用于插入的切片以及需插入切片的索引位置:
1
2
3
4
5
6
7
|
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语言的标准切片语法可以将元素从切片的开头和末尾删除,但是将其从中间删除就费点事儿了。看看下面的例子,分别描述如何从开头,从末尾,从中间删除切片元素:
1
2
3
4
|
s := []string{
"A"
,
"B"
,
"C"
,
"D"
,
"E"
,
"F"
,
"G"
}
s = s[
2
:]
//从开始处删除是s[:2]子切片
e := []string{
"A"
,
"B"
,
"C"
,
"D"
,
"E"
,
"F"
,
"G"
}
e = e[:
4
]
//从末尾处删除是e[4:]子切片
|
1
2
3
4
5
6
7
8
9
10
|
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
{}, start, end
int
) []
interface
{} {
return
append(slice[:start], slice[end:]...)
}
|
本文转自 ponpon_ 51CTO博客,原文链接:http://blog.51cto.com/liuxp0827/1355494,如需转载请自行联系原作者