Comment on page
15.Array,Set,Dictionary
- Array
- 有序数据集合
- Set
- 无序无重复数据集合
- Dictionary
- 无序键值对集合

Img
Swift 中的数组、集合和字典必须明确其中保存的键和值类型,这样就可以避免插入一个错误数据类型的值。同理,对于获取到的值你也可以放心,其数据类型是确定的。
注意Swift
的Set
类型被桥接到Foundation
中的NSSet
类。
一个类型想要存储在
Set
中必须是可Hash
的。该类型必须提供一个方法来计算它的Hash
值。(Hashable
协议)Swift
的所有基本类型(比如 String
、Int
、Double
和 Bool
)默认都是可哈希化的,可以作为集合值的类型或者字典键的类型。没有关联值的枚举成员值默认也是可哈希化的。// 声明
var favoriteGenres: Set<String> = ["Rock", "Classical", "Hip hop"]
// 推断
var favoriteGenres: Set = ["Rock", "Classical", "Hip hop"]

Img
let oddDigits: Set = [1, 3, 5, 7, 9]
let evenDigits: Set = [0, 2, 4, 6, 8]
let singleDigitPrimeNumbers: Set = [2, 3, 5, 7]
oddDigits.union(evenDigits).sorted()
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
oddDigits.intersection(evenDigits).sorted()
// []
oddDigits.subtracting(singleDigitPrimeNumbers).sorted()
// [1, 9]
oddDigits.symmetricDifference(singleDigitPrimeNumbers).sorted()
// [1, 2, 9]

Img
let houseAnimals: Set = ["🐶", "🐱"]
let farmAnimals: Set = ["🐮", "🐔", "🐑", "🐶", "🐱"]
let cityAnimals: Set = ["🐦", "🐭"]
houseAnimals.isSubset(of: farmAnimals)
// true
farmAnimals.isSuperset(of: houseAnimals)
// true
farmAnimals.isDisjoint(with: cityAnimals)
// true
Last modified 2yr ago