Set
Set
中的所有元素是无序的,每个元素只出现一次。如果一个序列不要求它是有序的、包含重复元素的,使用Set
会比数组更加的高效。
- 初始化
// 可使用数组字面量的方式初始化Set
let numbers: Set = [0, 1, 2, 3, 1]
// [2, 0, 1, 3]
- 补集&交集&并集
// 补集
let persons1: Set = ["jack", "eric", "jane"]
let persons2: Set = ["jack", "helen", "jane", "eric"]
let persons3 = persons2.subtracting(persons1)
// helen
// 交集
let persons1: Set = ["jack", "eric", "jane"]
let persons2: Set = ["jack", "helen", "jane"]
let persons3 = persons1.intersection(persons2)
// ["jack", "jane"]
// 并集
let persons1: Set = ["jack", "eric", "jane"]
let persons2: Set = ["jack", "helen", "jane"]
let persons3 = persons1.union(persons2)
// ["helen", "jack", "jane", "eric"]
Range
范围代表两个区间的值,包含了上下边界的定义。一共有八种不同类型可以表示范围,最常用的为Range
(..<半开范围)和CloseRange
(...闭合范围)两种。
// 半闭合
let ranges = 0..<10
debugPrint(Array(ranges))
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
debugPrint(type(of: ranges))
// CountableRange
// 闭合
let ranges1 = 0...10
debugPrint(Array(ranges1)) // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
- 可数范围
for i in 0..<10 {
debugPrint(i)
}
上面代码说明Range可被迭代,但事实上Range
和ClosedRange
既不是序列,也不是集合类型。 之所以能迭代是因为它是一个遵守了Strideable
协议的CountableRange
,而CountableRange
又遵守了RandomAccessCollection
协议,这些协议在Swift标准库代码中都可以找到,这种功能称为可数范围,它的边界只能是整数与指针。
- 部分范围:由只有一侧的边界构成
let numbers = [1, 2, 3, 4 , 5]
numbers[..<2] // [1, 2]
numbers[2...] // [3, 4, 5]
numbers[...] // [1, 2, 3, 4, 5]
网友评论