切片slice
1、切片
切片是数组的一个引用,因此切片是引用类型,在进行传递时,遵守引用类型的机制
切片的使用和数组类似,如遍历切片,访问切片的元素和求切片长度len(slice)都一样。
切片的长度是可以变化的,因此切片是一个可以动态变化的数组
2、切片的定义
var 切片名 []类型
比如: var a []int
3、切片的使用
3.1 通过引用一个已声明好的数组
func main() {
intArr := [...]int{0, 1, 2, 3, 4, 5, 6}
slice := intArr[1:6]
}
slice是一个切片
intArr[1:6]表示引用到intArr这个数组
引用intArr数组的起始下标为1,最后的下标为3(但是不包含3)
3.2 通过make来创建切片
基本语法:var 切片名 []type = make([]type,len,cap)
参数说明:type就是数据类型,len为长度,cap为容量(可选),cap不小于len
func main() {
var slice []int = make([]int, 5, 10)
// slice必须make后才能使用
slice[0] = 1
slice[4] = 9
}
通过make方式创建切片可以指定切片的大小和容量
如果没有给切片的各个元素赋值,那么就会使用默认值,
通过make方式创建的切片对应的数组,是由make底层维护,对外不可见,即只能通过slice去访问各个元素
3.3 直接指定具体数组,使用原理类似make方式
func main() {
var slice []string = []string{"jake", "tom", "marry"}
}
3.4 切片可以继续切片
func main() {
var slice []string = []string{"jake", "tom", "marry"}
slice2 := slice[1:3]
}
3.5 用append内置函数,可以对切片进行动态追加
func main() {
var slice []string = []string{"jake", "tom", "marry"}
slice = append(slice, "Lucy", "Lily")
fmt.Printf("slice追加后=%v\n", slice)
var slice2 []string = []string{"jake", "tom", "marry"}
// 可以追加切片
slice = append(slice, slice2...)
fmt.Printf("slice追加切片slice2后=%v\n", slice)
}
输出:
slice追加后=[jake tom marry Lucy Lily]
slice追加切片slice2后=[jake tom marry Lucy Lily jake tom marry]
切片append操作的原理分析:
a. go底层会创建一个新的数组newArr(安装扩容后大小)
b. 将slice原来包含的元素拷贝到新的数组newArr
c. slice重新引用到newArr
注意newArr是底层来维护的,程序员不可见。
3.6 使用copy内置函数来实现切片的拷贝操作
func main() {
var slice []int = []int{1, 2, 3, 4, 5}
slice2 := make([]int, 10)
copy(slice2, slice)
fmt.Printf("slice2=%v\n", slice2)
}
4、string和slice
string底层是一个byte数组,本身是引用这个byte数组的切片 ,因此string也可以进行切片处理
func main() {
str := "www.baidu.com"
slice := str[10:]
fmt.Printf("slice=%v\n", slice)
}
string是不可变的,也就是说不能通过str[0]='z'方式来修改字符串
如果需要修改字符串,可以先将string->[]byte或者[]rune->修改后重新转成string
切片slice的更多相关文章
- go 数组(array)、切片(slice)、map、结构体(struct)
一 数组(array) go语言中的数组是固定长度的.使用前必须指定数组长度. go语言中数组是值类型.如果将数组赋值给另一个数组或者方法中参数使用都是复制一份,方法中使用可以使用指针传递地址. 声明 ...
- golang切片slice
切片slice是引用类型 len()函数获取元素的个数 cap()获取数组的容量 1.申明方式 (1)var a []int 与数组不同的是他不申明长度(2)s2 := make([]int, 3, ...
- 在python&numpy中切片(slice)
在python&numpy中切片(slice) 上文说到了,词频的统计在数据挖掘中使用的频率很高,而切片的操作同样是如此.在从文本文件或数据库中读取数据后,需要对数据进行预处理的操作.此时就 ...
- Golang 入门 : 切片(slice)
切片(slice)是 Golang 中一种比较特殊的数据结构,这种数据结构更便于使用和管理数据集合.切片是围绕动态数组的概念构建的,可以按需自动增长和缩小.切片的动态增长是通过内置函数 append( ...
- Go 灵活多变的切片Slice
我们知道数组定义好之后其长度就无法再修改,但是,在实际开发过程中,有时候我们并不知道需要多大的数组,我们期望数组的长度是可变的, 在 Go 中有一种数据结构切片(Slice) 解决了这个问题,它是可变 ...
- 7 切片slice
include 切片 切片的日常用法 切片slice 其本身并不是数组,它指向底层的数组 作为变长数组的替代方案,可以关联底层数组的局部或者 为引用类型. 可以直接创建或从底层数组获取生成. 使用le ...
- go递归函数如何传递数组切片slice
数组切片slice这个东西看起来很美好,真正用起来会发现有诸多的不爽. 第一,数组.数组切片混淆不清,使用方式完全一样,有时候一些特性又完全不一样,搞不清原理很容易误使用. 第二,数组切片的appen ...
- [PY3]——内置数据结构(9)——线性结构与切片/命名切片slice()
线性结构的总结 列表list 元组tuple 字符串str bytes bytearray的共同点: 都是顺序存储.顺序访问的: 都是可迭代对象: 都可以通过索引访问 线性结构的特征: 可迭代 ...
- Go语言【第十二篇】:Go数据结构之:切片(Slice)、范围(Range)、集合(Map)
Go语言切片(Slice) Go语言切片是对数组的抽象,Go数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数 ...
- go中的数据结构切片-slice
1.部分基本类型 go中的类型与c的相似,常用类型有一个特例:byte类型,即字节类型,长度为,默认值是0: bytes = []btye{'h', 'e', 'l', 'l', 'o'} 变量byt ...
随机推荐
- webstrom配置ES6 file watch没有生效
参考了文章https://www.cnblogs.com/kiimi/p/8663467.html设置后,依然没有看到编译后的文件,然后设置了输出文件夹为当前项目,再重启webstrom就看到了--
- using Spire.Pdf 合并文件夹下.pdf 文件
using Spire.Pdf private void mergePDF() { List<string> filesList = new List<string>(); D ...
- Source Tree 1、解决打开闪退问题2、解决找不到项目的问题
闪退问题主要做了两点 1.版本降到3.1.2 下载链接:Sourcetree Download Archives | Sourcetree 2.参考博客做出文件修改参考bigbig猿博客 新建json ...
- C语言printf输出32位十六进制
long c = 0X1DAB83; //十六进制数字 printf("c=%lx\n", c); //以十六进制形式输出(字母小写) printf("c=%lX\n&q ...
- Qframework UIKit
用QFramework的UIKit 功能很容易实现UI模块的MVC功能,但MVC模式构造起来还是会有些繁琐, 两个相互直接的UIElement 之间的一些数据传输和调用都要用Msg通过UIPanel ...
- element ui 分页
修改选中页码的样式: .el-pager .active{ color:red !important;//选中 } .el-pager .number:hover{ color:red !import ...
- labwindows excel 不同电脑上无法保存
存到c盘以外的盘,c盘因为权限问题可能无法写入
- net/http
客户端 GET POST form表单 json body二进制流 上传文件 PUT DELETE HEAD 重定向 Client Request Response Cookie CookieJar ...
- 实验一 密码引擎-1-OpenEuler-OpenSSL编译
1. 下载最新的OpenSSL源码 2. 用自己的8位学号建立一个文件夹,cd 你的学号,用pwd获得绝对路径 3. 参考https://www.cnblogs.com/rocedu/p/508762 ...
- redis - 常用方法封装总结
package com.citydo.utils; import org.springframework.data.redis.connection.DataType; import org.spri ...