golang中slice切片的修改操作

简介:

   本文主要介绍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,如需转载请自行联系原作者
目录
相关文章
|
5月前
|
Go 索引
Go 语言中同一 slice 上的切片其底层数组是否是同一个
Go 语言中同一 slice 上的切片其底层数组是否是同一个
45 0
|
1月前
|
Go
Golang语言之切片(slice)快速入门篇
这篇文章是关于Go语言中切片(slice)的快速入门教程,详细介绍了切片的概念、定义方式、遍历、扩容机制、使用注意事项以及相关练习题。
26 5
|
2月前
|
人工智能 Go
go slice 扩容实现
go slice 扩容实现
39 3
|
2月前
|
人工智能 编译器 Go
go slice 基本用法
go slice 基本用法
43 1
|
2月前
|
存储 算法 Go
|
2月前
|
监控 Serverless Go
Golang 开发函数计算问题之Go 语言中切片扩容时需要拷贝原数组中的数据如何解决
Golang 开发函数计算问题之Go 语言中切片扩容时需要拷贝原数组中的数据如何解决
|
4月前
|
Java Go
Go 中 slice 的内存管理机制
Go 中 slice 的内存管理机制
|
4月前
|
Go 索引
GOLANG SLICE 的底层实现
GOLANG SLICE 的底层实现
|
4月前
|
Go
【golang】golang 字符串切片排序
【golang】golang 字符串切片排序
54 1
|
5月前
|
关系型数据库 MySQL Go
golang使用gorm操作mysql1
golang使用gorm操作mysql1
golang使用gorm操作mysql1
下一篇
无影云桌面