首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >golang学习笔记10:数组切片Slice

golang学习笔记10:数组切片Slice

作者头像
JKXQJ
发布于 2018-11-08 09:48:45
发布于 2018-11-08 09:48:45
31300
代码可运行
举报
运行总次数:0
代码可运行

Go 语言切片是对数组的抽象。

Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了

一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是

不固定的,可以追加元素,在追加时可能使切片的容量增大。


定义切片

你可以声明一个未指定大小的数组来定义切片:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var identifier []type

切片不需要说明长度。

或使用make()函数来创建切片:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var slice1 []type = make([]type, len)也可以简写为
slice1 := make([]type, len)

也可以指定容量,其中capacity为可选参数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
make([]T, length, capacity)

这里 len 是数组的长度并且也是切片的初始长度。

切片初始化

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
s :=[] int {1,2,3 } 

直接初始化切片,[]表示是切片类型,{1,2,3}初始化值依次是1,2,3.

其cap=len=3

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
s := arr[:] 

初始化切片s,是数组arr的引用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
s := arr[startIndex:endIndex] 

将arr中从下标startIndex到endIndex-1 下的元素创建

为一个新的切片

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
s := arr[startIndex:] 

缺省endIndex时将表示一直到arr的最后一个元素

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
s := arr[:endIndex] 

缺省startIndex时将表示从arr的第一个元素开始

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
s1 := s[startIndex:endIndex] 

通过切片s初始化切片s1

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
s :=make([]int,len,cap) 

通过内置函数make()初始化切片s,[]int 标识为

其元素类型为int的切片


len() 和 cap() 函数

切片是可索引的,并且可以由 len() 方法获取长度。

切片提供了计算容量的方法 cap() 可以测量切片最长可以达到多少。

以下为具体实例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package mainimport "fmt"func main() {
   var numbers = make([]int,3,5)
   printSlice(numbers)}func printSlice(x []int){
   fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)}

以上实例运行输出结果为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
len=3 cap=5 slice=[0 0 0]

空(nil)切片

一个切片在未初始化之前默认为 nil,长度为 0,实例如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package mainimport "fmt"func main() {
   var numbers []int
   printSlice(numbers)
   if(numbers == nil){
      fmt.Printf("切片是空的")
   }}func printSlice(x []int){
   fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)}

以上实例运行输出结果为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
len=0 cap=0 slice=[]切片是空的

切片截取

可以通过设置下限及上限来设置截取切片,实例如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package mainimport "fmt"func main() {
   /* 创建切片 */
   numbers := []int{0,1,2,3,4,5,6,7,8}   
   printSlice(numbers)
   /* 打印原始切片 */
   fmt.Println("numbers ==", numbers)
   /* 打印子切片从索引1(包含) 到索引4(不包含)*/
   fmt.Println("numbers[1:4] ==", numbers[1:4])
   /* 默认下限为 0*/
   fmt.Println("numbers[:3] ==", numbers[:3])
   /* 默认上限为 len(s)*/
   fmt.Println("numbers[4:] ==", numbers[4:])
   numbers1 := make([]int,0,5)
   printSlice(numbers1)
   /* 打印子切片从索引  0(包含) 到索引 2(不包含) */
   number2 := numbers[:2]
   printSlice(number2)
   /* 打印子切片从索引 2(包含) 到索引 5(不包含) */
   number3 := numbers[2:5]
   printSlice(number3)}
func printSlice(x []int){
   fmt.Printf("len=%d cap=%d slice=%v\n"
,len(x),cap(x),x)}

执行以上代码输出结果为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
len=9 cap=9 slice=[0 1 2 3 4 5 6 7 8]
numbers == [0 1 2 3 4 5 6 7 8]
numbers[1:4] == [1 2 3]
numbers[:3] == [0 1 2]
numbers[4:] == [4 5 6 7 8]
len=0 cap=5 slice=[]len=2 cap=9 
slice=[0 1]len=3 cap=7 slice=[2 3 4]

append() 和 copy() 函数

如果想增加切片的容量,我们必须创建一个新的更大的切片并把原分片的

内容都拷贝过来。

下面的代码描述了从拷贝切片的 copy 方法和向切片追加新元素

的 append 方法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package mainimport "fmt"func main() {
   var numbers []int
   printSlice(numbers)

   /* 允许追加空切片 */
   numbers = append(numbers, 0)
   printSlice(numbers)

   /* 向切片添加一个元素 */
   numbers = append(numbers, 1)
   printSlice(numbers)

   /* 同时添加多个元素 */
   numbers = append(numbers, 2,3,4)
   printSlice(numbers)

   /* 创建切片 numbers1 是之前切片的两倍容量*/
   numbers1 := make([]int, len(numbers), 
(cap(numbers))*2)

   /* 拷贝 numbers 的内容到 numbers1 */
   copy(numbers1,numbers)
   printSlice(numbers1)   }
func printSlice(x []int){
   fmt.Printf("len=%d cap=%d slice=%v\n"
,len(x),cap(x),x)}

以上代码执行输出结果为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
len=0 cap=0 slice=[]
len=1 cap=1 slice=[0]
len=2 cap=2 slice=[0 1]
len=5 cap=6 slice=[0 1 2 3 4]
len=5 cap=12 slice=[0 1 2 3 4]
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-10-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 oldriver编程老司机 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Python3 | 练气期,操作运算符,优先级顺序!
描述:上篇介绍了Python3编程基础数据类型,本篇将介绍Python3编程中的有那些运算符以及操作运算符优先级顺序,这也是在Python3编程中非常重要的一个部分,下来就跟随作者快速过一遍,加深一点印象吧!
全栈工程师修炼指南
2024/07/29
2450
Python3 | 练气期,操作运算符,优先级顺序!
python运算符优先级_excel运算符优先级最高的
【例】(1) 求~4, 我们用二进制来表示4: 4 的原码: 0000 0100 取反得到: 1111 1011, 观察符号,是负数,因为负数以补码存储的,所以问题转化为: 某个数 x 的补码是 1111 1011,求 x 的值(由补码求原码) 取反: 0000 0100 +1: 0000 0101 = 5, 加上标点符号(负号) 得到结果: -5
全栈程序员站长
2022/11/18
8160
python 函数、运算符以及运算符优先级
Python函数的基本介绍 什么是函数? 函数是一段可以直接被另外一段程序或代码引用的程序或代码, 也叫做子程序, 方法. 可重复使用 可互相调用 函数的目的 为了代码段的复用 在Python中如何定
友儿
2022/09/26
4830
python变量、运算符
变量 变量就是可以重复使用的一个量,或者叫一个代号 变量命名的规则 - 变量命名可以包含数字,大小写字母,下划线或者更多,但是我们不推荐除了前三种内容之外的符号 - 数字不可以打头 - 4man,5for是不可以的 - man4,for5是可以的 - 一般在python中,以下划线开头的内容具有特殊含义,不建议使用 - 比如\_age, \_name, 理论可以,但强烈不推荐,包括但不限于一个下划线开头和两个连续下划线开头 - 大小写不一样,俗称大小写敏感 - ForMan跟
ruochen
2021/05/10
1.5K0
python变量、运算符
【Python】从基础到进阶(三):深入了解Python中的运算符与表达式
在前两篇文章中,我们已经了解了Python的基础知识,包括基本的数据类型和数据类型转换,以及基本的输入输出操作。在实际编程过程中,运算符和表达式是不可或缺的部分,它们不仅用于执行基本的算术运算,还用于比较值、进行逻辑判断和操作位等。理解并熟练使用各种运算符和表达式,将大大提高代码的可读性和编写效率。
空白诗
2024/07/20
2680
【Python】从基础到进阶(三):深入了解Python中的运算符与表达式
C++运算符优先级
C++运算符优先级,是描述在计算机运算计算表达式时执行运算的先后顺序。 先执行具有较高优先级的运算,然后执行较低优先级的运算。 例如,我们常说的先执行相乘和除,再执行加减运算。
老九学堂-小师弟
2019/10/09
4.8K0
C运算符及优先级
1、常用运算符分类 运算符类型 作用 算术运算符 用于处理四则运算 赋值运算符 用于将表达式的值赋给变量 比较运算符 用于表达式的比较,并返回一个真值或假值 逻辑运算符 用于根据表达式的值返回真值或假值 位运算符 用于处理数据的位运算 sizeof运算符 用于求字节数长度 2、算术运算符 运算符 术语 示例 结果 + 正号 +3 3
mcxfate
2020/08/02
5240
Cpp运算符优先级
欢迎与我分享你的看法。 转载请注明出处:http://taowusheng.cn/
yifei_
2022/11/14
6410
Python学习笔记(3):运算符与表达式[通俗易懂]
下表运算符是从最低到最高。Python会首先计算表中最下面的运算符,然后再计算表上部的。实际上强烈建议使用圆括号来分组运算符和操作数,以便明确地指出运算的先后顺序,达到易读。
全栈程序员站长
2022/09/07
4120
Python全网最全基础课程笔记(三)——所有运算符+运算符优先级
Python中的运算符优先级决定了在包含多个运算符的表达式中,各个运算符的执行顺序。优先级高的运算符会先于优先级低的运算符执行。以下是Python中所有运算符的优先级列表,按照从高到低的顺序排列。
小白的大数据之旅
2024/11/20
5090
Python全网最全基础课程笔记(三)——所有运算符+运算符优先级
Java运算符及运算符的优先级
赋值运算符算术运算符关系运算符逻辑运算符位运算符三目运算符instanceof运算符
用户7886150
2021/04/25
1.2K0
Python基础之注释,算数运算符,变量
注释的作用:用自己熟悉的语言,对某些代码进行标注说明,增强程序的可读性; 在python解释器解释代码的过程中,凡是#右边的,解释器都直接跳过这一行;
py3study
2020/01/17
7180
Python运算符优先级
#!/usr/bin/python # -*- coding: UTF-8 -*- a = 20 b = 10 c = 15 d = 5 e = 0 e = (a + b) * c / d #( 30 * 15 ) / 5 print "(a + b) * c / d 运算结果为:", e e = ((a + b) * c) / d # (30 * 15 ) / 5 print "((a + b) * c) / d 运算结果为:", e e = (a + b) * (c / d); # (30) * (15/5) print "(a + b) * (c / d) 运算结果为:", e e = a + (b * c) / d; # 20 + (150/5) print "a + (b * c) / d 运算结果为:", e
用户8442333
2021/05/26
6510
《简明 Python 教程》学习笔记-运算符与表达式
又两天没更新了,暂且同步两篇之前的笔记。运算符与表达式这一块感觉主要就是运算符与它们的用法以及优先级了。
WindCoder
2018/09/20
4430
C语言运算符详解
C语言包含多种运算符,如算术、关系、逻辑、位、赋值和条件等,它们用于执行各种计算和操作,如加减乘除、比较、逻辑判断、位运算、赋值和条件控制等,是C语言编程中不可或缺的元素。
鲜于言悠
2024/05/24
1710
Python基础之运算符
1 算术运算符2 位运算符3 比较运算符4 赋值运算符5 身份运算符6 成员运算符7 逻辑运算符
用户7886150
2020/11/26
6840
C语言运算符优先级列表(超详细)
每当想找哪个运算符优先级高时,很多时候总是想找的就没有,真让人气愤!现在,终于有个我个人觉得非常全的,分享给大家。
全栈程序员站长
2022/11/09
10.6K0
Python 运算符
文字操作系统与外部最主要的接口就叫做 Shell。Shell 是操作系统最外面的一层。Shell 管理你与操作系统之间的交互:等待你输入,向操作系统解释你的输入,并且处理各种各样的操作系统的输出结果。
忆想不到的晖
2021/12/06
7040
Python 运算符
【C语言】C语言运算符优先级详解
在C语言中,运算符的优先级决定了表达式中各个运算符的计算顺序。了解这些优先级对于正确理解和编写复杂表达式至关重要。本文将深入探讨C语言中各种运算符的优先级及其影响。
学习起来吧
2024/03/23
1.3K0
【C语言】C语言运算符优先级详解
深入了解Python运算符和表达式:从基础到高级
Python运算符和表达式是编程中的核心概念,用于执行各种计算和操作。在本文中,我们将深入介绍Python运算符和表达式的各个方面,包括算术运算符、比较运算符、逻辑运算符、位运算符等,以帮助你更好地理解和应用它们。
海拥
2023/09/19
8430
深入了解Python运算符和表达式:从基础到高级
推荐阅读
相关推荐
Python3 | 练气期,操作运算符,优先级顺序!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档