概述
Swift 提供了数组、集合和字典来存储一组值。如果将集合赋给变量,则该集合是可变的,可以添加、移除或改变元素;如果将集合赋给常量,则该集合是不可变的。
数组
数组以有序的方式储存相同类型的值,它的类型可以写作Array<Element>
或[Element]
,其中Element
是数组中元素的类型。
创建一个空数组:
var someInts = [Int]()
使用默认值创建数组:
var threeDoubles = Array(repeating: 0.0, count: 3)
使用字面量创建数组:
var shoppingList = ["Eggs", "Milk"]
count
属性可以获取数组中元素的数量,isEmpty
属性可以检查数组是否为空:
shoppingList.count // 2
shoppingList.isEmpty // false
append()
方法可以在数组末尾添加新元素:
shoppingList.append("Apples")
+
可以连接两个数组,+=
可以在数组末尾添加一个或多个元素:
shoppingList += ["Cheese", "Oranges"]
从0
开始的下标可以访问或修改元素:
var firstItem = shoppingList[0] // Eggs
shoppingList[2] = "Pears"
改变一个范围的值,如果要修改的元素数量和新的元素数量不一致,数组的长度也会变化:
var arr = [1, 2, 3, 4, 5, 6]
arr[2...4] = [7, 8] // [1, 2, 7, 8, 6]
insert()
插入元素,remove()
移除元素,removeLast()
移除最后一个元素:
arr.insert(7, at: arr.count)
arr.remove(at: arr.count)
arr.removeLast()
使用for
遍历数组中的元素,使用enumerated()
遍历数组的索引和值:
for (index, value) in shoppingList.enumerated() {
print("Item \(index + 1): \(value)")
}
集合
集合以无序的方式存储相同类型的不可重复的值,它的类型可以写作Set<Element>
。
创建一个空集合:
var letters = Set<Character>()
使用字面量创建集合,数据类型必须显式给出,否则会被推断为数组:
var genres: Set = ["Rock", "Classical", "Hip hop"]
count
属性可以获取集合内元素的数量,isEmpty
属性可以检查集合是否为空:
genres.count // 3
genres.isEmpty // false
insert()
方法添加新元素到集合:
genres.insert("Jazz")
remove()
方法移除集合中的一个元素并返回它的值,如果元素不存在就返回nil
:
genres.remove("Jazz")
removeAll()
方法移除集合中的所有元素:
genres.removeAll()
contains()
方法检查集合中是否存在某个元素:
genres.contains("Funk") // false
集合可以用for
遍历,如果希望以特定顺序遍历需要使用sorted()
方法将其排序并转换为数组:
for g in genres.sorted() {
print("\(g)")
}
对于两个集合,常用操作包括:
- 取交集:
a.intersection(b)
- 取只属于
a
或b
的集合:a.symmetricDifference(b)
- 取并集:
a.union(b)
- 取差集:
a.subtracting(b)
- 判断两个集合是否有相同的元素:
a == b
- 判断
a
是否是b
的子集:a.isSubset(of: b)
- 判断
a
是否是b
的超集:a.isSuperset(of: b)
- 判断
a
是否是b
的真子集:a.isStrictSubset(of: b)
- 判断
a
是否是b
的真超集:a.isStrictSuperset(of: b)
- 判断
a
和b
是否拥有完全不同的值:a.isDisjoint(with: b)
字典
字典以无序方式存储一组键值对,其中所有的键必须是同一类型,所有的值也必须是同一类型,它的类型写作Dictionary<Key, Value>
或[Key: Value]
。
创建一个空字典:
var namesOfIntegers = [Int: String]()
用字面量创建字典:
var airports = ["YYZ", "Toronto", "DUB": "Dublin"]
count
属性可以获取字典中键值对的数量,isEmpty
属性可以检查字典是否为空:
airports.count // 2
airports.isEmpty // false
根据键来访问、添加或获取元素(如果元素不存在就返回nil
),或者使用updateValue()
方法:
airports["LHR"] = "London"
airports.updateValue("London", forKey: "LHR")
removeValue()
方法可以移除一个键值对并返回值,赋一个nil
也可以达到同样的效果:
airports.removeValue("LHR")
airports["LHR"] = nil
使用for
遍历字典中的键值对,使用键或值的sorted()
方法可以按特定顺序访问:
for (code, name) in airports {
print("\(code): \(name)")
}
如果只需要访问键或值的集合,使用keys
或values
属性:
for code in airports.keys {
print("\(code)")
}
for name in airports.values {
print("\(name)")
}