Swift集合类型-Set&Range

2018-03-01  本文已影响16人  shaneYu

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可被迭代,但事实上RangeClosedRange既不是序列,也不是集合类型。 之所以能迭代是因为它是一个遵守了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]
上一篇 下一篇

猜你喜欢

热点阅读