reserveCapacity
如果明確的知道一個數(shù)組的容量大小缆蝉,可以調用這個方法告訴系統(tǒng)這個數(shù)組至少需要的容量,避免在數(shù)組添加元素過程中重復的申請內存码泛。
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 會根據(jù)條件把集合里的元素重新排序讶迁,符合條件的元素移動到最后连茧,返回一個兩個部分分界元素的索引。
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: )
根據(jù)next里的閉包來生成下一個元素啸驯,和reduce完全相反。特別的是這個函數(shù)返回的是一個 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"
歡迎關注我的微博:@沒故事的卓同學