Swift中Array冷门方法拾遗

作者: 没故事的卓同学 | 来源:发表于2017-03-09 23:41 被阅读1888次

    reserveCapacity

    如果明确的知道一个数组的容量大小,可以调用这个方法告诉系统这个数组至少需要的容量,避免在数组添加元素过程中重复的申请内存。

    var alphabet = [String]()
    alphabet.reserveCapacity(26)
    

    lexicographicallyPrecedes

    lexicographic 是词典的意思。这个方法声明在 AnyCollection 里。会按照顺序比较两个集合元素的大小。
    比如下面代码展示了如何比较两个字符串版本号的大小:

    let storeVersion = "3.14.10"
    let currentVersion = "3.130.10"
    
    extension String {
        func versionToInt() -> [Int] {
            return self.components(separatedBy: ".")
                .map { Int.init($0) ?? 0 }
        }
    }
    
    //true
    storeVersion.versionToInt().lexicographicallyPrecedes(currentVersion.versionToInt())
    

    partition

    partition 会根据条件把集合里的元素重新排序,符合条件的元素移动到最后,返回一个两个部分分界元素的索引。

    var numbers = [30, 40, 20, 30, 30, 60, 10]
    let p = numbers.partition(by: { $0 > 30 })
    // p == 5
    // numbers == [30, 10, 20, 30, 30, 60, 40]
    
    let head = numbers.prefix(upTo: p)
    // head == [30, 10, 20, 30, 30]
    let end = numbers.suffix(from: p)
    // end == [60, 40]
    

    再通过prefix和suffix可以分别获得集合的两段元素。

    sequence(first: next: )

    根据next里的闭包来生成下一个元素,和reduce完全相反。特别的是这个函数返回的是一个 UnfoldSequence ,即里面的值是lazy的,只要在访问时才生成,这也可能是一个无限的队列。

    for x in sequence(first: 0.1, next: { $0 * 2 }).prefix(while: { $0 < 4 }) {
        // 0.1, 0.2, 0.4, 0.8, ...
    }
    

    似乎特别适合用来寻祖,当next闭包返回的是nil时队列就终止了:

    for view in sequence(first: someView, next: { $0.superview }) {
        // someView, someView.superview, someView.superview.superview, ...
    }
    

    elementsEqual

    用来判断两个队列的是否拥有相同的元素,并且顺序是一致的

    let a = 1...3
    let b = 1...10
     
    print(a.elementsEqual(b))
    // Prints "false"
    print(a.elementsEqual([1, 2, 3]))
    // Prints "true"
    

    欢迎关注我的微博:@没故事的卓同学

    相关文章

      网友评论

      • GCKJianshu:请问,swift如何删除数组中指定下标的元素。比如一个有10个元素的数组,我想要删除第1,3,5,2,7个元素(顺序也不一定的),该怎么做最简单快速呢?
        我将一直都在:[原数组].enumerated().filter { ![下标].contains($0.offset) }.map { $0.element }
        ifelseboyxx:老哥,你知道怎么方法了吗?

      本文标题:Swift中Array冷门方法拾遗

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