Swift中Array冷門方法拾遺

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"

歡迎關注我的微博:@沒故事的卓同學

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 先搬好小板凳買包瓜子,對了還有辣條········ reserveCapacity 在明確的知道一個數組的容量大小...
    南森北寞閱讀 858評論 0 1
  • java筆記第一天 == 和 equals ==比較的比較的是兩個變量的值是否相等,對于引用型變量表示的是兩個變量...
    jmychou閱讀 1,516評論 0 3
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,869評論 18 139
  • 2016-03-02寫歌君我要寫歌體驗站 文簫原創音樂 靜謐森林 本周邀請到的是純音樂創作人文簫,以下是寫歌君對他...
    我要寫歌閱讀 860評論 0 0
  • 今夜,人生中再次內心動蕩 我以為我聰明 我以為我堅強 我以為自己沒有貪欲 我以為自己沒有悲傷 卻不知一個人的心 已...
    雨初33閱讀 144評論 0 0