目录
理解难度
★★★☆☆
实用程度
★★★★★
Swift的字符串、整数、布尔值和浮点数可以暂时存储单个值,但如果想要存储许多值的话,通常就会改用数组。
你可以像其他类型的数据一样创建数组的常量和变量,但区别在于数组可以在其中包含许多值。例如,如果想存储工作日的名称、每天的天气预测或游戏的分数,你就需要一个数组,而不是单个值。
Swift中的数组可以随意的调整大或小,或说多寡。如果它是可变的,就可以自由新增元素到数组中。随着时间的推移构建数据,你可能需要根据实际的情况删除某些元素,或者重新排列。
数组(array)使用有序列表储存同一类别的多个值。相同的值可以多次出现在一个数组的不同位置中。
声明数组变量或常量时的类别,有Array<Element>及[Element]两种方式(Element是需要明确表示的类别,如Int、String、Double等等),如下:
// 声明储存 Int 类别的数组
var arr: Array<Int>
var arr2: [Int]
有两种数组类别表示方式,在功能上是一样的,得到的结果也是一样的。所以用第二种就好了。
什么时候会用到数组呢?
例如:
- 需要在一个应用程序储存所有的单词列表。
- 记录使用指是否已经读过某一篇文章。
- 记录一个得分的名次列表。
- 代办事项的内容列表。
还有很多使用的时机,多发挥想像空间,就可以善用数组的方法。
创建一个空数组
// 声明一个类别为 Int 的空数组
var 数组3 = [Int]()
// 为这个数组加上一个值
数组3.append(12)
// 这时如果又要再将这个数组指派成空数组
// 因为前面声明时已经定义好类别
// 所以可以很简单的使用 [ ] 来指派成空数组
数组3 = []
// 或是首次声明变量时 有明确定义好类别 也可以使用 []
var anotherArr: [Int] = []
创建一个带有预设值的数组
数组类别还提供一个可以创建特定大小并且所有资料都被预设的建构方法。将准备加入新数组的适当类别的初始值repeating与资料数量count传入数组建构函式:
var threeInts = Array(repeating: 0, count: 3)
// threeInts 是一种 [Int] 数组, 等于 [0, 0, 0]
可能你会觉得这个方法什么时候会用上呢? [0, 0, 0]不是更快,更容易理解吗?
想想看,如果你要放进去100个值呢?不个打到晕掉了...
合并两个数组
理解难度
★★☆☆☆
实用程度
★★☆☆☆
数组可以使用加法运算子+来合并两个数组,如下:
// 首先创建一个 [0,0,0] 的数组
var secondThreeInts = Array(repeating: 0, count: 3)
// 接着再创建一个 [2,2,2] 的数组
var anotherThreeInts = Array(repeating: 2, count: 3)
// 最后将两个数组合并
var SixInts = secondThreeInts + anotherThreeInts
// 会变成 [0,0,0,2,2,2]
直接填入值来创建数组
理解难度
★☆☆☆☆
实用程度
★★★★★
可以直接填入值来创建数组,每个值以逗号,分隔,如下:
var 购物清单: [String] = ["蛋", "牛奶"]
// 即创建了一个类别为 [String] 且包含两个值的数组
// 因为 Swift 会自动的类别推断
// 所以数组中如果明确的表示了是什么类别的值 便不用再标注类别
var 蔬果清单 = ["白菜", "苹果"]
// 因为数组包含着类别为 String 的值
// Swift 可以推断这个数组的类别为 [String]
存取与修改数组
一开始说过数组是有序的集合,所以可以依照索引值(依照顺序的排列序号)来取得数组内的值,如下:要记得,数组的索引值是从 0 开始算起。
var 清单 = ["Apples", "Eggs", "Milk", "Rice", "Water"]
// 数组的索引值是由 0 开始计算 所以 清单[2] 指的是第三个
// 打印出:Milk
print(清单[2])
// 要修改一个索引值对应的值 直接将其指派新的值就可以了
清单[2] = "Oranges"
// 这时已将 Milk 改成 Oranges 所以会打印出:Oranges
print(清单[2])
// 如果要修改一个区间内的值 可以使用区间写法修改
清单[1...4] = ["Milk"]
// 这样会将原本索引值 1 到 4 的值修改成 Milk
// 所以现在 “清单” 会变成 ["Apples", "Milk"]
print(清单)
可以使用属性count来表示数组内值的数量,会返回一个非负的整数。另外也可以使用属性isEmpty来检查数组内是否有值,会返回一个布林值。例子如下:
理解难度
★★☆☆☆
实用程度
★★★★★
var 清单2 = ["Apples", "Eggs", "Milk"]
// 打印出数组中的个数:3
print(清单2 .count)
// 将数组指派为空数组
清单2 = []
if 清单2 .isEmpty {
print("空的 !")
} else {
print("不是空的 !")
}
// 因为为空数组 内部没有值 所以会打印出:空的 !
加入或移除数组内的值:
理解难度
★★★☆☆
实用程度
★★☆☆☆
// 使用 append(_:) 方法来加入新的值
var 清单3 = ["Apples", "Eggs"]
清单3.append("Milk") // 加入新的值 顺序会在最后一个
// 现在 “清单3” 会变成 ["Apples", "Eggs", "Milk"]
// 如果要选择加入的索引值的位置 使用 insert(_:at:) 方法
// 清单3.insert(要加入的值, at:要加入的索引值位置)
清单3.insert("Rice" ,at: 0)
// 现在 “清单3” 会变成 ["Rice" ,"Apples", "Eggs", "Milk"]
// 所有索引值在后面的都会顺延往后一个位置
// 移除一个索引位置的值 使用 remove(at:) 方法
清单3.remove(at:1) // 将排在第二个的 Apples 移除
// 所有后面的值都会递补向前一个位置
// 现在 “清单3” 会变成 ["Rice", "Eggs", "Milk"]
// 或者是移除最后一个值 使用 removeLast() 方法
清单3.removeLast()
// 现在 “清单3” 会变成 ["Rice", "Eggs"]
使用for-in遍历数组中的所有值:
var 清单4 = ["Rice" ,"Apples", "Eggs", "Milk"]
for item in 清单4 {
print(item)
}
// 会依序打印出:
// Rice
// Apples
// Eggs
// Milk
// 当你同时也需要获得数组值时 可以使用 enumerated() 方法
for (index, value) in 清单4.enumerated() {
print("Item \(index + 1): \(value)")
}
// 会依序打印出:
// Item 1: Rice
// Item 2: Apples
// Item 3: Eggs
// Item 4: Milk
TED演讲的8个秘诀:学习18分钟高效表达-重点笔记-CSDN下载