golang之切片的操作详解
基础知识:
-其本身并不是数组,silce指向底层的数组
-作为变长数组的替代方案,可以关联底层数组的局部与全部
-为引用类型
-可以直接创建或从底层数组获取生成
-使用len()获取元素个数,cap()获取容量
-若果多个silce指向相同底层数组,其中一个的值改变会影响全部
声明:make([] T,len,cap)
切片使用:欺骗默认指向一段连续内存区域,可以使数组,也可以是切片本身
从数组生成切片:
var a = [3] int {1,2,3} //创建数组
fmt.Println(a,a[1:2]) //1代表起始位置,2代表终止位置
输出:[1,2,3] [2]
1、从指定位置生成切片
a[x:y] //x是起始位置,y是终止位置
2、表示原有切片
a[:]
3、清空切片:
a[0:0]
声明切片:
var name [ ] T
//声明字符串切片
var strList [ ] string
//声明整型切片
var numList [ ] int
//声明一个空切片
var numListEmpty = [ ] int { }
使用make()函数构造切片
make([ ]T,size,cap) //T切片类型,size分配元素个数,cap切片容量
例子:func函数中
a:= make([ ]int,2) //默认容量为元素个数
b:= make([ ]int,2,10)//元素个数2,容量10 切片的容量根据根据元素个数成倍增长
fmt.Println(a,b)
fmt.Println(len(a),len(b))
输出:[0,0] [0,0]
2 , 2
使用append()函数为切片添加元素
格式:append(数组名,元素1,元素2,元素3……) //元素的添加个数可以是一个也可以是多个
例子:
var car [ ] string
car = append(car,"hello")//单个添加
car = append(car,"world","and","go","!")
添加切片
carComponent := [ ] string (“hello”,“I”,“am”,“C++”) //声明切片
car = append(car,team) //添加切片
fmt.Println(car)
输出结果:[hello world and go ! hello I am C++]
切片的复制:
copy(destSilce,srcSlice [ ] T) int //destSilce为复制目标,srcSlice切片来源
package main
import "fmt"
func main() {
// 设置元素数量为1000
const elementCount = 1000
// 预分配足够多的元素切片
srcData := make([]int, elementCount)
// 将切片赋值
for i := 0; i < elementCount; i++ {
srcData[i] = i
}
// 引用切片数据,此时的切片传递的是地址值
refData := srcData
// 预分配足够多的元素切片
copyData := make([]int, elementCount)
// 将数据复制到新的切片空间中,此时数据复制只存在值的copy过程与地址无关
copy(copyData, srcData)
// 修改原始数据的第一个元素
srcData[0] = 999
// 打印引用切片的第一个元素
fmt.Println(refData[0])
// 打印复制切片的第一个和最后一个元素
fmt.Println(copyData[0], copyData[elementCount-1])
// 复制原始数据从4到6(不包含)
copy(copyData, srcData[4:6])
for i := 0; i < 5; i++ {
fmt.Printf("%d \n", copyData[i])
}
}
输出结果:
999
0 999
4
5
2
3
4
从切片中删除元素:
package main
import "fmt"
func main() {
seq := []string{"a", "b", "c", "d", "e"}
// 指定删除位置
index := 2
// 查看删除位置之前的元素和之后的元素,并依此将删除元素之前的元素按序打印,删除元素之后的元素按序打印
fmt.Println(seq[:index], seq[index+1:])
// 删除指定元素之后,删除点前后元素连接起来,将剩余元素按序打印
seq = append(seq[:index], seq[index+1:]...)
fmt.Println(seq)
}
基础知识:
-其本身并不是数组,silce指向底层的数组
-作为变长数组的替代方案,可以关联底层数组的局部与全部
-为引用类型
-可以直接创建或从底层数组获取生成
-使用len()获取元素个数,cap()获取容量
-若果多个silce指向相同底层数组,其中一个的值改变会影响全部
声明:make([] T,len,cap)
切片使用:欺骗默认指向一段连续内存区域,可以使数组,也可以是切片本身
从数组生成切片:
var a = [3] int {1,2,3} //创建数组
fmt.Println(a,a[1:2]) //1代表起始位置,2代表终止位置
输出:[1,2,3] [2]
1、从指定位置生成切片
a[x:y] //x是起始位置,y是终止位置
2、表示原有切片
a[:]
3、清空切片:
a[0:0]
声明切片:
var name [ ] T
//声明字符串切片
var strList [ ] string
//声明整型切片
var numList [ ] int
//声明一个空切片
var numListEmpty = [ ] int { }
使用make()函数构造切片
make([ ]T,size,cap) //T切片类型,size分配元素个数,cap切片容量
例子:func函数中
a:= make([ ]int,2) //默认容量为元素个数
b:= make([ ]int,2,10)//元素个数2,容量10 切片的容量根据根据元素个数成倍增长
fmt.Println(a,b)
fmt.Println(len(a),len(b))
输出:[0,0] [0,0]
2 , 2
使用append()函数为切片添加元素
格式:append(数组名,元素1,元素2,元素3……) //元素的添加个数可以是一个也可以是多个
例子:
var car [ ] string
car = append(car,"hello")//单个添加
car = append(car,"world","and","go","!")
添加切片
carComponent := [ ] string (“hello”,“I”,“am”,“C++”) //声明切片
car = append(car,team) //添加切片
fmt.Println(car)
输出结果:[hello world and go ! hello I am C++]
切片的复制:
copy(destSilce,srcSlice [ ] T) int //destSilce为复制目标,srcSlice切片来源
package main
import "fmt"
func main() {
// 设置元素数量为1000
const elementCount = 1000
// 预分配足够多的元素切片
srcData := make([]int, elementCount)
// 将切片赋值
for i := 0; i < elementCount; i++ {
srcData[i] = i
}
// 引用切片数据,此时的切片传递的是地址值
refData := srcData
// 预分配足够多的元素切片
copyData := make([]int, elementCount)
// 将数据复制到新的切片空间中,此时数据复制只存在值的copy过程与地址无关
copy(copyData, srcData)
// 修改原始数据的第一个元素
srcData[0] = 999
// 打印引用切片的第一个元素
fmt.Println(refData[0])
// 打印复制切片的第一个和最后一个元素
fmt.Println(copyData[0], copyData[elementCount-1])
// 复制原始数据从4到6(不包含)
copy(copyData, srcData[4:6])
for i := 0; i < 5; i++ {
fmt.Printf("%d \n", copyData[i])
}
}
输出结果:
999
0 999
4
5
2
3
4
从切片中删除元素:
package main
import "fmt"
func main() {
seq := []string{"a", "b", "c", "d", "e"}
// 指定删除位置
index := 2
// 查看删除位置之前的元素和之后的元素,并依此将删除元素之前的元素按序打印,删除元素之后的元素按序打印
fmt.Println(seq[:index], seq[index+1:])
// 删除指定元素之后,删除点前后元素连接起来,将剩余元素按序打印
seq = append(seq[:index], seq[index+1:]...)
fmt.Println(seq)
}
golang之切片的操作详解相关推荐
- python列表切片后得到剩余列表_python列表切片和嵌套列表取值操作详解
python列表切片和嵌套列表取值操作详解 给出列表切片的格式: [开头元素::步长] # 输出直到最后一个元素,(最后一个冒号和步长可以省略,下同) [开头元素:结尾元素(不含):步长] # 其中, ...
- python对输入的字符串进行解析_python数据类型_字符串常用操作(详解)
这次主要介绍字符串常用操作方法及例子 1.python字符串 在python中声明一个字符串,通常有三种方法:在它的两边加上单引号.双引号或者三引号,如下: name = 'hello' name1 ...
- python加密字符串小写字母循环后错两位_python数据类型_字符串常用操作(详解)
这次主要介绍字符串常用操作方法及例子 1.python字符串 在python中声明一个字符串,通常有三种方法:在它的两边加上单引号.双引号或者三引号,如下: name = 'hello' name1 ...
- 【Python】Numpy数组的切片、索引详解:取数组的特定行列
[Python]Numpy数组的切片.索引详解:取数组的特定行列 文章目录 [Python]Numpy数组的切片.索引详解:取数组的特定行列 1. 介绍 2. 切片索引 2.1 切片索引先验知识 2. ...
- 核心要素及常用操作详解
核心要素及常用操作详解 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5z6s4kZN-1678660733651)(http://49.7.203.222:3000/ ...
- python基础-变量,变量类型,字符串str,元组tuple,列表list,字典dict操作详解(超详细)
python基础--变量 (文章较长,若需要单独看某一个点,可点击目录直接跳转) 文章目录 python基础--变量 1. 变量 2. 变量类型 2.1数字类型 2.2 字符串 2.3 列表 2.4 ...
- python输入参数改变图形_Python基于Tensor FLow的图像处理操作详解
本文实例讲述了Python基于Tensor FLow的图像处理操作.分享给大家供大家参考,具体如下: 在对图像进行深度学习时,有时可能图片的数量不足,或者希望网络进行更多的学习,这时可以对现有的图片数 ...
- 第 5 章 Nova - 041 - Resize Instance 操作详解
Resize Instance 操作详解 Resize 的作用是调整 instance 的 vCPU.内存和磁盘资源. Instance 需要多少资源是定义在 flavor 中的,resize 操作是 ...
- SVN的Windows和Linux客户端操作详解
SVN的Windows和Linux客户端操作详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Windows客户端操作 1.安装SVN客户端 a>.去官网下载svn软件 ...
最新文章
- 【C++】【六】约瑟夫问题
- PHP:第一章——PHP中的魔术常量
- linux系统12,Linux操作系统12则经典应用技巧
- Qt Creator构建Web应用程序
- c# uri.host_C#| Uri.IsHexEncoding()方法与示例
- 收藏 | 自监督视觉Transformer
- 20172318 2018-2019-1 《程序设计与数据结构》第9周学习总结
- 让其他CMS黯然失色的we7CMS
- CentOS 7 中英文桌面安装步骤详细图解
- mysql数据库 set类型_MYSQL数据库数据类型
- Python自然语言处理学习笔记(30):4.2 序列
- cv2中函数名的规则
- phpstudy不安装mysql_MySQL_mysql安装不上怎么办 mysql安装失败原因和解决方法,mysql数据库安装不了了!mysql最 - phpStudy...
- JAVA后端开发常用的Linux命令总结
- windows下完美的免费QT开发环境: QtCreator + VC2008Express
- 快速求实对称矩阵特征向量的技巧
- Node.js meitulu图片批量下载爬虫1.02版
- 023.二叉树的最近公共祖先
- 大数据高级开发工程师——Spark学习笔记(7)
- 微信朋友圈背景图片尺寸