• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本课涵盖:

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

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


太阳系中的行星被分类为类地行星、气态巨星和冰巨星。读者可以用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




鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
go中bufio使用小结发布时间:2022-07-10
下一篇:
http://www.ebookshare.net/plus/search.php?keyword=sharepoint&kwtype=0&GO ...发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap