先搬好小板凳買包瓜子器瘪,對了還有辣條········
reserveCapacity
在明確的知道一個數(shù)組的容量大小的情況下宋税,可以調(diào)用這個方法告訴系統(tǒng)這個數(shù)組至少需要的容量价说,避免這個數(shù)組在添加元素過程中重復(fù)的申請內(nèi)存
stringArray = [String]()
stringArray.reserveCapacity(99)
lexicographicallyPrecedes
lexicographic百度翻譯告訴我這個是“字典”(詞典)這個方法聲明在 AnyCollection 里馅精。會按照順序比較兩個集合元素的大小杂瘸。
舉個爪子(例子): 比較兩個字符串版本號的大小
versionOne ="0.0.1"
versionTwo ="2.0.1"
extensionString {
func versionToInt()-> [Int] {
returnself.components(separatedBy:".")
.map{Int.init($0) ??0}
}
}
//true
versionOne.versionToInt().lexicographicallyPrecedes(versionTwo.versionToInt())
partition
partition 會根據(jù)條件把集合里的元素重新排序,符合條件的元素移動到最后碉咆,返回一個兩個部分分界元素的索引
varnumbers = [30,40,20,30,30,60,10]
letp = numbers.partition(by: { $0>30})
// p == 5
// numbers == [30, 10, 20, 30, 30, 60, 40]
lethead = numbers.prefix(upTo: p)
// head == [30, 10, 20, 30, 30]
letend = numbers.suffix(from: p)
// end == [60, 40]
再通過prefix和suffix可以分別獲得集合的兩段元素
sequence(first: next: )
根據(jù)next里的閉包來生成下一個元素抖韩,和reduce完全相反。特別的是這個函數(shù)返回的是一個 UnfoldSequence 疫铜,即里面的值是lazy的茂浮,只要在訪問時才生成,這也可能是一個無限的隊列壳咕。
forxinsequence(first:0.1, next: { $0*2}).prefix(while: { $0<4}) {// 0.1, 0.2, 0.4, 0.8, ...}
似乎特別適合用來尋祖席揽,當(dāng)next閉包返回的是nil時隊列就終止了:
forviewinsequence(first: someView, next: { $0.superview }) {// someView, someView.superview, someView.superview.superview, ...}
代碼沒上傳圖片 敲粗來 格式自理