本课涵盖:

• 使用切片通过窗口查看太阳系

• 用标准库按字母顺序排列切片

太阳系中的行星被分类为类地行星、气态巨星和冰巨星。读者可以用planets[0:4]切割planets数组中的前4个元素,以主要关注类地行星。 切割不会改变planets数组,它只是在数组中创建一个窗口或视图。这个视图是一种称为切片的类型。

图17.1 切割太阳系

考虑这一点

如果你有一个收藏集合,它以特定方式组织起来了吗? 图书馆书架上的书可以按照作者的姓氏排序。 这使你可以专注于同一个作家写的其他书籍。

切片可以用于以相同的方式对部分集合进行归零。

17.1 切割一个数组

切片以半开区间表示。 例如,在以下列表中,planets[0:4]从planets于索引0开始继续往上到4,但不包括索引为4的行星。

程序清单17.1 切片数组:slicing.go

planets := [...]string{

"Mercury",

"Venus",

"Earth",

"Mars",

"Jupiter",

"Saturn",

"Uranus",

"Neptune",

}

terrestrial := planets[0:4]

gasGiants := planets[4:6]

iceGiants := planets[6:8]

fmt.Println(terrestrial, gasGiants, iceGiants)  ❶

❶ Print [Mercury Venus Earth Mars] [Jupiter Saturn] [Uranus Neptune]

虽然terrestrial,gasGiants和iceGiants都是切片,但你仍然可以像数组一样,在切片内索引。

fmt.Println(gasGiants [0])                      ❶

❶ Print Jupiter

读者也可以先切割数组,然后再切生成的切片。

giants := planets[4:8]

gas := giants[0:2]

ice := giants[2:4]

fmt.Println(giants, gas, ice)                                                           ❶

❶ Print [Jupiter Saturn Uranus Neptune] [Jupiter Saturn] [Uranus Neptune]

terrestrial, gasGiants, iceGiants, giants, gas, and ice切片都是同一planets数组的视图。 为切片的元素分配新值实际上会修改潜在的planets数组。 更改将通过其他切片显示。

iceGiantsMarkII := iceGiants                                                                ❶

iceGiants[1] = "Poseidon"

fmt.Println(planets)                                                                              ❷

fmt.Println(iceGiants, iceGiantsMarkII, ice)                                        ❸

❶Copy the iceGiants slice (a view of the planets array)

❷Print [Mercury Venus Earth Mars Jupiter Saturn Uranus Poseidon]

❸Print [Uranus Poseidon] [Uranus Poseidon] [Uranus Poseidon]

快速检查

Q17.1 当切割一个数组后产生了什么?

Q17.2 用planets[4:6]切片后,结果中有多少元素?

17.1.1 切片的默认索引


切割一个数组时,省略第一个索引默认为数组的开头。 省略最后一个索引默认为数组的长度。 这使得程序清单17.1中的切片可以写成如下形式。

程序清单17.2 默认索引:slicing-default.go

terrestrial := planets[:4]

gasGiants := planets[4:6]

iceGiants := planets[6:]

切片索引不能是负数。

读者大概可以猜到省略两个索引的用处。 allPlanets变量是包含所有八大行星的切片。

allPlanets := planets[:]

切割字符串

数组的切片语法也适用于字符串。

neptune := "Neptune"

tune := neptune[3:]

fmt.Println(tune)

❶ Print tune

切割字符串的结果会得到另一个字符串。然而,给neptune分配一个新的值不会改变tune的值,反之亦然。

neptune = "Poseidon" fmt.Println(tune) ❶

❶             Print tune

pdf百度云:

链接:https://pan.baidu.com/s/1yW7_zCS9BiR381FcGNPzfA 密码:6los

Go语言编程17课:切片,步入数组的窗口(附pdf百度云)相关推荐

  1. Go语言之父详述切片与数组的不同

    切片是Go 语言核心的数据结构,然而刚接触 Go 的程序员经常在切片的工作方式和行为表现上被绊倒.比如,明明说切片是引用类型但在函数内对其做的更改有时候却保留不下来,有时候却可以.究其原因是因为我们很 ...

  2. c语言编程排课系统,C语言-课表排课系统.docx

    C语言-课表排课系统 基本操作: 输入并创建链表(单向和双向)"参见:infcreato:装载"算法与存储一致 存储//图形模式下,进行文件读写操作后有无故的异常显示 查询//算法 ...

  3. C语言编程基础-10函数形参数组做形参文件操作

    函数形参 被调函数的形参在被调用时临时创建并使用实参对其赋值,故直接修改形参(特殊形式的形参如指针,数组除外)本身只会影响到被调函数内部; 形式参数是在函数调用发生时临时创建出来的,在函数调用结束时又 ...

  4. c语言编程回文数用数组,【C语言程序设计】C语言回文数怎么求?

    问题描述 打印所有不超过n(取n<256)的其平方具有对称性质的数(也称回文数). 问题分析 对于要判定的数n计算出其平方后(存于a),按照"回文数"的定义要将最高位与最低位 ...

  5. c语言数组与指针编程源码,C语言编程(练习9:数组与指针)

    题目:有 5 个字符串,首先将它们按照字符串中的字符个数由小到大排列,再分别取出每个字符串的第三个字母合并成一个新的字符串输出(若少于三个字符的输出空格).要求:利用字符串指针和指针数组实现. 代码实 ...

  6. c语言中怎么用二维数组作为函数参数——来自百度大神

    可以用二维数组名作为实参或者形参,在被调用函数中对形参数组定义时可以指定所有维数的大小,也可以省略第一维的大小说明,如: void Func(int array[3][10]); void Func( ...

  7. 15f104 c语言编程,DIY插座 STC15F104单片机红外遥控继电器(附程序源码)

    //STC 15F104W #include #define TURE 1 #define FALSE 0 sbit IR=P3^2;//红外接口标志 sbit Relay=P3^4;//继电器1输出 ...

  8. python计算机视觉pdf百度云下载_Python计算机视觉编程pdf

    Python计算机视觉编程 内容简介 <Python计算机视觉编程>是计算机视觉编程的实践指南,依赖Python语言讲解了基础理论与算法,并通过大量示例细致分析了对象识别.基于内容的图像搜 ...

  9. pdf百度云下载 python编程 从数据分析到数据科学_python零基础入门教程,不同方向的,这很重要...

    很多人都在学python,对于大多数的人来说,方向最重要的,它决定着你的结果! ​编程小十接触过很多想学python的人,相对于自己的学习目的来说,很多时候容易选择不太正确的方向. 下面我简单介绍一下 ...

  10. python神经网络编程pdf百度云下载-Python神经网络编程高清版.pdf

    Python神经网络编程高清版.pdf 所属分类:人工智能/神经网络/深度学习 开发工具:Python 文件大小:9787KB 下载次数:2 上传日期:2020-06-26 11:49:20 上 传 ...

最新文章

  1. SQL Server ALwayson 正在解析
  2. MFC EDIT控件的使用记录
  3. jieba库词频统计_网购评论之词频分析
  4. vue 判断同一数组内的值是否一直_前端代码+后端API,值得一学的Vue高仿音乐播放器实战项目
  5. 】.NET使用NPOI组件将数据导出Excel
  6. Visual C# 2008+SQL Server 2005 数据库与网络开发――3.1.3 C# 2008和.NET Framework 3.5的关系...
  7. 原始套接字与抓包过滤规则setsockopt(fd, SOL_SOCKET, SO_ATTACH_FILTER, ...)
  8. POJ 1755 Triathlon(半平面交)
  9. Xilisoft iPad Magic Platinum for Mac如何制作铃声?将联系人传输到计算机/设备?
  10. PCIe device tree range属性详解
  11. 计算机命令指示符大全,常用CMD命令提示符大全:让你玩转Win7系统“运行命令”!...
  12. 身份证实名认证java后台代码
  13. C#中的Obsolete
  14. 怎么获取微信公众号的音频视频
  15. 从Google表格中的字符串中提取多个特定长度的数字子串的解决思路
  16. html、css、vue、js在VsCode中代码格式化(代码自动调准为标准格式)
  17. “橄榄型”人口结构制约消费增长
  18. 海量数据分布式存储技术-作业五
  19. 给中年工程师的忠告 转自前辈工程师 “嵌入式玩家”
  20. IP地址、端口号、网络字节序

热门文章

  1. linux第五单元作业,第五单元《微型计算机系统》教案
  2. Windows 2012 R2 操作系统搭建DHCP-HA集群
  3. lduan server 2012 RMS 群集安装 上(十四)
  4. POJ2063 Investment(完全背包)
  5. iOS MapViewDemo地图小样例
  6. 云集新功能:移动 Web 调试从未变得如此简单
  7. 1.4补充 三态缓存(tristate buffer)与 多路复用器(Multiplexers)
  8. chrome失去响应问题
  9. 如何成为优秀的技术人员
  10. 三步完美完成wordpress外链跳转