Swift笔记(三)之集合种类(Collection Types)

Collection Types(集合种类)

Swift的作者,给我们提供了2种集合种类,我们都众所周知的用来存数据的 arrays(数组), dictionaries(字典).数组 Array用来存储有序的相同类型的一组数据,而字典 Dictionary用来存储无序的相同类型的一组数组,可以通过一个id来引用或者通过id来查找一个value.这个id也就是我们说的 key.
数组跟字典必须明确类型后才能储存,也就是说你不能随便插入一个错误的类型.的值到 Array或者 Dictionary.编译器是会报错的.反之你可以很自信的使用从该集合或者字典中取出的值,因为他的类型是确定的.

  • Array
数组是一个可以存储大量相同类型的有序列表,这些值都可以出现多次,他们是被分配在不同的位置(索引).
Array Type shorthand syntax(数组类型的简写)
数组创建的完整写法为Array<SomeType>:
var intArray = Array<Int>(count:2,repeatedValue:3)//表示创建一个长度为2,内容为2个3的数组
数组创建的简短写法为SomeType[]:
var intArray = Int[](count:2,repeatedValue:3)//表示创建一个长度2,内容为2个3的数组
Array Literals(数组字面量)
你可以通过一组数组字面量来初始化一个数组,这是最简洁的一种方式为一个集合赋值,具体写法如下
[value1,value2,value3]
我们举个完整的例子:
var mans = ["shoper","shawn"]//未声明数组的类型,因为swift会自动推断数据类型.
或者是:
var mans:String[] = ["shoper","shawn"]//主动式申明数据类型.
Accessing and Modifying an Array(访问和修改一个数组)
问:我们知道了如何创建一个数组,那么我们该如何去访问和修改数组中的一个元素呢?
答:我们可以通过数组内置的方法,属性或者使用下标的方式来对数组操作.
1.访问数组的个数:
访问数组的个数,我们使用到数组的一个 count属性.
someArray. count
2.往末尾添加数据:
调用 append函数可以往数组的末尾添加一个数据,当然类型要与数组的申明的类型一致
someArray. append(item)
当然也并非这一种方式,还可以通过 += 的操作符来给数组末尾添加数据
someArray += item
当然也并非只能添加一个数据,你也可以添加一个数组.
someArray += [item1,item2,item3]
3:从数组中获取和修改值
我们通过下标的方式从数组中获取对应的值
var firstValue = someArray[0]//获取数组中第一元素的值.
var lastValue = someArray[someArray.count-1]获取数组中最后一个元素的值
我们也能通过下标的方式修改数组中的值
someArray[0] = "shoper"//我们把数组中第一个元素的值修改Shoper
还记得我们在操作符那章看到过的 范围操作符吗 ( ... 全闭  ..半闭).对于我做 JAVA开发的人来说,这无疑是一个新的语法
someArray[1..2] = ["shoper"]  //1..2取的值为1,所以修改someArray下标为1的元素的值为shoper
someArray[1...2] = ["shoper","shawn"]//1...2取的值为1,2,所以修改someArray下标为1,2的元素的值分别为shoper,shawn
以上是比较简单的了,下面举2个比较容易混淆的例子
1 var someArray = ["1","2","3","4"]
2 someArray[1...2] = ["shawn"]注意:2-3行代码都是单独的,而不是在一起的.
3 someArray[1...2] = ["shawn","shoper"]
4 someArray[1...2] = ["shawn","shoper","ShawnShoper"]
大家可能会感到疑惑.为什么有的只有一个值,有的二个,有的3个呢.
当范围数大于值的个数,那么会根据顺序赋值,没有的值对应的下标的元素将会被删除.
当范围数等于值的个数,那么会把值按顺序放进对应的下标.
当范围数大于值的个数,那么首先把值按顺序放进对应的下标,超过下标数的值将在前一个值后面插入,之前的值依次往后推.
具体说明:
当执行第2行代码后,someArray的值为  ["1","shawn","4"]
当执行第3行代码后,someArray的值为  ["1","shawn","shoper","4"]
当执行第4行代码后,someArray的值为  ["1","shawn","shoper","ShawnShoper","4"]

Note:我们不能使用数组下标的方式往数组末尾新增一个数据,因为这样会触发运行时异常,数组下标越界.如果你要尝试使用下标的方式给数组修改值,记得要提前判断该下标是否超出了数组的长度.你可以使用count 属性来判断该数组的长度.
你也可以使用  insert  方法往数组的指定位置添加一个值例如:
someArray.insert(value1,atIndex:0)//往0号位置添加一个value1
同样的,我们可以使用 removeAtIndex 方法.来删除指定位置的元素
     someArray.removeAtIndex(0)//删除0号位置的元素
Iterating Over an Array(迭代遍历数组)
我们依然使用for循环来遍历数组
for arr in someArray{   //把someArray的每个元素循环放入arr中
  arr//在playground中输出arr
}
如果我们需要取到  数组中的值与对应的下标.那么我们使用swift提供的全局函数 enumerate 来代替普通的迭代遍历.该方法返回一个index,value的tuple元组.
for (index,value) in <span style="background-color: rgb(255, 204, 102);">enumerate</span>(someArray){
   "Item\(index+1):\(value)"		//在playground输出
}
创建和初始化一个数组
var array = Int[]()
  • Dictionary(字典)
DictionaryArray类似,只是 Dictionary是以 Key-Value方式来存储数据,访问和修改元素都是一样的.
获取字典的key集合,使用 dictionary.keys.获取value集合使用.values
key删除一条数据使用 removeValueFromKey(key)
遍历字典:
for (key,value) in dictionary{
   "Key:\(key),value\(value)"
}
N ote:实践告诉我们定义一个不可变的字典或者数组,可以让编译器优化,达到更高的性能
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值