美文网首页
Swift集合类型-Set&Range

Swift集合类型-Set&Range

作者: shaneYu | 来源:发表于2018-03-01 17:51 被阅读16次

    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]
    

    相关文章

      网友评论

          本文标题:Swift集合类型-Set&Range

          本文链接:https://www.haomeiwen.com/subject/ttcnxftx.html