15.Array,Set,Dictionary

三种集合类型:

  • Array

    • 有序数据集合

  • Set

    • 无序无重复数据集合

  • Dictionary

    • 无序键值对集合

Swift 中的数组、集合和字典必须明确其中保存的键和值类型,这样就可以避免插入一个错误数据类型的值。同理,对于获取到的值你也可以放心,其数据类型是确定的。

Set

注意 SwiftSet 类型被桥接到 Foundation 中的 NSSet 类。

集合类型的Hash

一个类型想要存储在Set中必须是可Hash的。该类型必须提供一个方法来计算它的Hash值。(Hashable协议)

Swift 的所有基本类型(比如 StringIntDoubleBool)默认都是可哈希化的,可以作为集合值的类型或者字典键的类型。没有关联值的枚举成员值默认也是可哈希化的。

语法

// 声明
var favoriteGenres: Set<String> = ["Rock", "Classical", "Hip hop"]

// 推断
var favoriteGenres: Set = ["Rock", "Classical", "Hip hop"]

集合操作

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]
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 updated