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[]:Array Literals(数组字面量)var intArray = Int[](count:2,repeatedValue:3)//表示创建一个长度2,内容为2个3的数组
你可以通过一组数组字面量来初始化一个数组,这是最简洁的一种方式为一个集合赋值,具体写法如下我们举个完整的例子:[value1,value2,value3]
或者是:var mans = ["shoper","shawn"]//未声明数组的类型,因为swift会自动推断数据类型.
Accessing and Modifying an Array(访问和修改一个数组)var mans:String[] = ["shoper","shawn"]//主动式申明数据类型.
问:我们知道了如何创建一个数组,那么我们该如何去访问和修改数组中的一个元素呢?答:我们可以通过数组内置的方法,属性或者使用下标的方式来对数组操作.1.访问数组的个数:访问数组的个数,我们使用到数组的一个 count属性.someArray. count2.往末尾添加数据:调用 append函数可以往数组的末尾添加一个数据,当然类型要与数组的申明的类型一致someArray. append(item)当然也并非这一种方式,还可以通过 += 的操作符来给数组末尾添加数据someArray += item当然也并非只能添加一个数据,你也可以添加一个数组.someArray += [item1,item2,item3]3:从数组中获取和修改值我们通过下标的方式从数组中获取对应的值我们也能通过下标的方式修改数组中的值var firstValue = someArray[0]//获取数组中第一元素的值. var lastValue = someArray[someArray.count-1]获取数组中最后一个元素的值
还记得我们在操作符那章看到过的 范围操作符吗 ( ... 全闭 ..半闭).对于我做 JAVA开发的人来说,这无疑是一个新的语法someArray[0] = "shoper"//我们把数组中第一个元素的值修改Shoper
以上是比较简单的了,下面举2个比较容易混淆的例子someArray[1..2] = ["shoper"] //1..2取的值为1,所以修改someArray下标为1的元素的值为shoper someArray[1...2] = ["shoper","shawn"]//1...2取的值为1,2,所以修改someArray下标为1,2的元素的值分别为shoper,shawn
大家可能会感到疑惑.为什么有的只有一个值,有的二个,有的3个呢.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"]
当范围数大于值的个数,那么会根据顺序赋值,没有的值对应的下标的元素将会被删除.当范围数等于值的个数,那么会把值按顺序放进对应的下标.当范围数大于值的个数,那么首先把值按顺序放进对应的下标,超过下标数的值将在前一个值后面插入,之前的值依次往后推.具体说明:当执行第2行代码后,someArray的值为 ["1","shawn","4"]当执行第3行代码后,someArray的值为 ["1","shawn","shoper","4"]当执行第4行代码后,someArray的值为 ["1","shawn","shoper","ShawnShoper","4"]
Note:我们不能使用数组下标的方式往数组末尾新增一个数据,因为这样会触发运行时异常,数组下标越界.如果你要尝试使用下标的方式给数组修改值,记得要提前判断该下标是否超出了数组的长度.你可以使用count 属性来判断该数组的长度.你也可以使用 insert 方法往数组的指定位置添加一个值例如:同样的,我们可以使用 removeAtIndex 方法.来删除指定位置的元素someArray.insert(value1,atIndex:0)//往0号位置添加一个value1
someArray.removeAtIndex(0)//删除0号位置的元素Iterating Over an Array(迭代遍历数组)我们依然使用for循环来遍历数组如果我们需要取到 数组中的值与对应的下标.那么我们使用swift提供的全局函数 enumerate 来代替普通的迭代遍历.该方法返回一个index,value的tuple元组.for arr in someArray{ //把someArray的每个元素循环放入arr中 arr//在playground中输出arr }
创建和初始化一个数组for (index,value) in <span style="background-color: rgb(255, 204, 102);">enumerate</span>(someArray){ "Item\(index+1):\(value)" //在playground输出 }
var array = Int[]()
- Dictionary(字典)
Dictionary与 Array类似,只是 Dictionary是以 Key-Value方式来存储数据,访问和修改元素都是一样的.获取字典的key集合,使用 dictionary.keys.获取value集合使用.values按key删除一条数据使用 removeValueFromKey(key)遍历字典:N ote:实践告诉我们定义一个不可变的字典或者数组,可以让编译器优化,达到更高的性能for (key,value) in dictionary{ "Key:\(key),value\(value)" }