Swift开发——元组

举报
TiAmoZhang 发表于 2024/06/14 16:55:18 2024/06/14
【摘要】 严格意义上,元组不属于数据类型,而属于数据结构。元组将一些变量或常量或字面量组织成一个有序的序列,索引号从0开始,用圆括号“()”括起来,各个元素间用“,”分隔。元组中可以有任意多个元素,各个元素可为任意类型;如果元组被定义为变量,则其各个位置的元素值可以改变(但各个位置的元素的数据类型保持不变)。

640.jpg

Swift语言的数据类型包括整型、浮点型、字符串、布尔型、数组、元组、集合和字典等,本文将详细介绍元组。

01、元组


严格意义上,元组不属于数据类型,而属于数据结构。元组将一些变量或常量或字面量组织成一个有序的序列,索引号从0开始,用圆括号“()”括起来,各个元素间用“,”分隔。元组中可以有任意多个元素,各个元素可为任意类型;如果元组被定义为变量,则其各个位置的元素值可以改变(但各个位置的元素的数据类型保持不变)。

元组常被用作函数的返回值,借助元组可以从函数中返回多个值。

程序段1介绍了元组的基本用法。

图片

在程序段1中,第3行“var price=5.6”定义变量price,赋初值为5.6,Swift语言自动识别price为Double型变量。

第4行“var tup1=("Apple",price,"Shangdao")”定义元组tup1,这里的元组为变量,其各个位置的元素值可以修改,但其各个位置的元素的数据类型保持不变,例如,第1个索引位置(从0开始索引)处只能为Double型数据。此外,元组不是数据类型,定义元组时,不用指定类型。

第5行“print(tup1)”在控制台上输出整个元组tup1,即输出“("Apple", 5.6, "Shangdao")”。

第6行“print(tup1.0)”在控制台上输出元组tup1的第0索引号对应的元素,即输出“Apple”。

第7行“tup1.1=8.9”将tup1元组的第1索引号位置的元素修改为8.9。元组中的元素可以借助“元组名.索引号”访问。

第8行“print(tup1)”输出元组tup1,得到“("Apple", 8.9, "Shangdao")”。

第9行“var tup2=(fruit:tup1,kind:"Fushi")”定义元组tup2。定义元组时可以为其每个元组指定“名称”或“标签”,并且元组可以嵌套,这里“fruit”为tup1的标签;“kind”为“Fushi”的标签。定义了元组中各个元素的标签后,可以借助“元组名.标签名”访问相应的元素。

第10行“print(tup2)”输出元组tup2,得到“(fruit:("Apple", 8.9, "Shangdao"), kind:"Fushi")”。

第11行“print(tup2.kind)”输出元组tup2的标签为kind的元素,得到“Fushi”。

第12行“tup2.kind="Guoguang"”由于元组tup2为变量,这里将tup2的kind标签的元素修改为“Guoguang”。

第13行“print(tup2.1)”输出元组tup2的第1索引号位置的元素,得到“Guoguang”。

第14行“let cord=(x:3.4,y:7.8,z:4.9)”定义cord元组,具有3个元素,它们的标签依次为x、y和z。这里的cord对应于空间中一个点的坐标,且这里元组cord为常量。

第15行“var (x,y,_)=cord”称为元组的“解包”“拆包”或“分解”,而把一组变量、常量或字面量组合为一个元组,可称为元组的“打包”。这里x赋值为元组cord的标签x对应的元素;y赋值为cord的标签y对应的元素;“_”为占位符,表示cord的标签z对应的元素被忽略。这里的变量x、y与cord元素中的同名标签互不影响。

第16行“print(x," ",y)”输出“3.47.8”,两个值间有3个空格。

第17行“print(cord.z)”输出cord元组的标签z对应的元素,得到“4.9”。

程序段1的执行结果如图1所示。

图片

■ 图1 程序段1的执行结果


元组主要用作函数的返回值,可以返回多个值。此外,元组可以实现多个变量或常量的并行赋值。例如:

图片

上述代码中,第2行“(x,y)=(y,x)”以两个元组的形式实现并行赋值,即交换x和y的值。

两个元组间可以比较大小,要求两个元组对应位置的元素类型相同,且对应位置的元素可以比较大小。元组按照其元素从左至右的方式依次比较相应位置上元素的大小,得到第一个较大元素值的元组大。若两个元组的全部对应位置上的元素都相等,则两个元组相等。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。