数组
数组使用有序列表存储同一类型的多个值。相同的值可以多次出现在一个数组的不同位置中。
- Swift中的Array类型被桥接到Foundation中的NSArray类。
数组的简单语法
写 Swift 数组应该遵循像Array这样的形式,其中Element是这个数组中唯一允许存在的数据类型。我们也可以使用像[Element]这样的简单语法。尽管两种形式在功能上是一样的,但是推荐较短的那种
创建一个空数组
使用构造方法创建一个由特殊数据类型构成的空数组:
var intArray = [Int]()
//通过构造函数的类型, intArray的值类型被推断为[Int]
可以通过大括号将数组置空
//向数组中追加元素,此刻数组intArray中元素个数为0
intArray.append(100)
//此时数组intArray中元素个数为1
intArray = []
//此刻intArray中数组为空,但由于开始初始化数组intArray为[Int]型的,虽然现在数组为空,但其仍为[Int]型数组。
创建一个数组(带默认值)
var threeInts = [Int](count: 5, repeatedValue: 100)
print("threeInts is \(threeInts)")
//output: [100, 100, 100, 100, 100]
var threeIntsTwo = [100, 100, 100, 100, 100, 100, 100, 100, 100, 100]
//Swift会根据数组中的元素自动推断出数组的值类型 , 强制在数组中添加不同类型的元素显然是不合法的
通过两个数组相加创建一个数组
可以使用加法操作符(+)来组合两种已存在的相同类型的数组,所得出的新数组的数据类型会从两个相加的数组中推断出来。
var arrayOne = Array(count: 3, repeatedValue: 10)
var arrayTwo = Array(count: 4, repeatedValue: 9)
var arrayAdd = arrayOne + arrayTwo
// arrayAdd : [10, 10, 10, 9, 9, 9, 9] 数据类型为Int
// 如果将两个不同数据类型的数组相加 会报错
用字面量构造数组
可以使用字面量进行数组构造,字面量是一系列由逗号分隔并由方括号包含的数值:
[value1, value2, value3, value4......]
创建一个goodList的并存储String的数组:
var goodList : [String] = ["car", "toy"]
//goodList已经被构造并且拥有两个初始项
goodList变量被声明为“字符串值类型的数组”,记作[String].因为这个数组被规定只有String一种数据结构,所以其中只能存储String类型。由Swift的推断机制,当用”car”和”toy”来初始化数组时,数组就被自动匹配成为字符串值类型的数组。所以,goodList数组也可以写成下面的形式,其结果和上面的一样:
var goodList = ["car", "toy"]
因为所有字面量中的值都是相同的类型,Swift可以推断出[String]是goodList中变量的正确类型。
访问和修改数组
- 获取数组元素的个数
var count = goodList.count
- 检测数组是否为空
if goodList.isEmpty{
print("The goodList is empty.")
}else{
print("The goodList is not empty.")
}
- 追加元素
goodList.append("pen")
- 使用加法赋值运算符(+=)可以直接在数组后面添加一个或多个拥有相同类型的数据项
goodList += ["ink", "ice"]
- 直接使用下标语法来获取数组中的数据项。
var firstItem = goodList[0]
- 通过下标修改已有索引值对应的数据值
goodList[2] = "pencil"
- 可以通过下标改变一系列的数据值,即使新数据和原有数据的数量是不一样的
//将goodList数组第一和第二个元素替换成“apple” 两个换成一个 后面的一次向前移动
goodList[1...2] = ["apple"];
//Tips:不可在数组的末尾执行此项操作
- 插入元素
goodList.insert("orange", atIndex: 0)
- 移除元素,在指定的位置
let temp = goodList.removeAtIndex(0)
//直接移除最后一项
let temp1 = goodList.removeLast()
- 排序
goodList.sort { (let str1, let str2) -> Bool in
return str1 < str2
}
goodList.sortInPlace { (let str1, let str2) -> Bool in
return str1 < str2
}
数组的遍历
- 使用for-in循环来遍历所有数组中的数据项
for item in goodList{
print(item)
}
- 如果同时需要使用每个数据项和索引值,可以使用enumerate()方法来进行数组遍历。enumerate()返回一个由每一个数据项索引值和数据值组成的元组。可以把这个元组分解成为临时常量或者变量进行遍历。
for (index, value) in goodList.enumerate(){
print("item --> \(item) , value --> \(value)")
}