Swift 语言提供Arrays、Sets和Dictionaries三种基本的集合类型用来存储集合数据。数组(Arrays)是有序数据的集。集合(Sets)是无序无重复数据的集。字典(Dictionaries)是无序的键值对的集。存储的数据值类型必须明确。

数组(Arrays)

数组使用有序列表存储同一类型的多个值。

(一)数组的简单语法

数组形式:Array< Element > 或者Array[Element]
Element是这个数组中唯一允许存在的数据类型。

(二)创建一个空数组

(1)使用构造语法来创建一个由特定数据类型构成的空数组:

var someInts = [Int]()
print("someInts is of type [Int] with \(someInts.count) items.")
// 打印 "someInts is of type [Int] with 0 items."
// 构造函数的类型,someInts的值类型被推断为[Int]

(2)一个函数参数或者一个已经定义好类型的常量或者变量,我们可以使用空数组语句创建一个空数组,它的写法很简单:[](一对空方括号)

someInts.append(3)
// someInts 现在包含一个 Int 值
someInts = []
// someInts 现在是空数组,但是仍然是 [Int] 类型的。

(三)创建一个带有默认值的数组

Swift 中的Array类型还提供一个可以创建特定大小并且所有数据都被默认的构造方法。我们可以把准备加入新数组的数据项数量(count)和适当类型的初始值(repeating)传入数组构造函数:

var threeDoubles = Array(repeating: 0.0, count: 3)
// threeDoubles 是一种 [Double] 数组,等价于 [0.0, 0.0, 0.0]

(四)通过两个数组相加创建一个数组

加法操作符(+)来组合两种已存在的相同类型数组。

var anotherThreeDoubles = Array(repeating: 2.5, count: 3)
// anotherThreeDoubles 被推断为 [Double],等价于 [2.5, 2.5, 2.5]

var sixDoubles = threeDoubles + anotherThreeDoubles
// sixDoubles 被推断为 [Double],等价于 [0.0, 0.0, 0.0, 2.5, 2.5, 2.5]

(五)用数组字面量构造数组

数组字面量是一系列由逗号分割并由方括号包含的数值:
[value 1, value 2, value 3]

var shoppingList: [String] = ["Eggs", "Milk"]
// shoppingList 已经被构造并且拥有两个初始项。
由于 Swift 的类型推断机制,当我们用字面量构造只拥有相同类型值数组的时候,我们不必把数组的类型定义清楚。
var shoppingList = ["Eggs", "Milk"]
// 所有数组字面量中的值都是相同的类型,Swift 可以推断出[String]是shoppingList中变量的正确类型。

(六)访问和修改数组

(1)count:数组的只读属性,来获取数组中的数据项数量。
(2)isEmpty:布尔属性,作为一个缩写形式去检查count属性是否为0,即数组中是否有数据项。
(3)append(_:)方法:在数组后面添加新的数据项。
(4)加法赋值运算符(+=):可以直接在数组后面添加一个或多个拥有相同类型的数据项。
(5)下标
<1>用数组的下标语法来获取其中的数据项。
<2>也可以用下标来改变某个已有索引值对应的数据值。
<3>还可以利用下标来一次改变一系列数据值,使用闭合区间(a…b)进行改写,新数据和原有数据的数量可以是不一样。
<4>不可以用下标访问的形式去在数组尾部添加新项。
(6)insert(_:at:)方法: 来在某个具体索引值之前添加数据项
(6)remove(at:)方法:移除数组中的某一项。at后面为要移除的数据项的下标值。如果我们只想把数组中的最后一项移除,可以使用removeLast()方法,可以避免获取count属性进行比较。
注:
索引值(数组下标)不可越界。可以使用索引值和数组的count属性进行比较来在使用某个索引之前先检验是否有效。

(七)数组的遍历

(1)使用for-in循环来遍历所有数组中的数据项。
(2)enumerated()方法:可获得每个数据项的值和索引值。其返回的是一个由索引值和数据值组成的元组。可以把这个元组分解成临时常量或者变量来进行遍历。

var list=["Eggs","Milk","Flour","Bananas"]
for (index, value) in shoppingList. enumerated() {
    print("Item \(String(index + 1)): \(value)")
}
// Item 1: Eggs
// Item 2: Milk
// Item 3: Flour
// Item 4: Bananas