數(shù)組的值意義
-
Swift 數(shù)組具有值語(yǔ)義半开,它們從不會(huì)在不同的地方被共享使用(沒(méi)有 共用的引用)
不共享內(nèi)存
類(lèi)型推斷 -
兩個(gè)都改變
類(lèi)型限定并不能保證 -
不影響原數(shù)組
不影響原數(shù)組 -
為什么a用let修飾可以改變恋日,c卻不可以(swift中只有一種類(lèi)型Array),用var和let修飾可變
疑惑
數(shù)組變形
- map:每個(gè)值執(zhí)行轉(zhuǎn)換操作
- 使用函數(shù)將行為參數(shù)化
- 一些函數(shù)
→ map和 atMap—如何對(duì)元素進(jìn)行變換
→ lter—元素是否應(yīng)該被包含在結(jié)果中
→ reduce—如何將元素合并到一個(gè)總和的值中
→ sort和lexicographicCompare—兩個(gè)元素應(yīng)該以怎樣的順序進(jìn)行排列 → indexOf和contains—元素是否符合某個(gè)條件
→ minElement和maxElement—兩個(gè)元素中的最小/最大值是哪個(gè)
→ elementsEqual和startsWith—兩個(gè)元素是否相等
→ split—這個(gè)元素是否是一個(gè)分割符
→ accumulate—累加榜配,和reduce類(lèi)似罗捎,不過(guò)是將所有元素合并到一個(gè)數(shù)組中鬼雀,而且保 留合并時(shí)每一步的值绑改。
→ allMatch和noneMatch—測(cè)試序列中是不是所有元素都滿足某個(gè)標(biāo)準(zhǔn),以及是不是 沒(méi)有任何元素滿足某個(gè)標(biāo)準(zhǔn)性含。它們可以通過(guò) contains 和它進(jìn)行了精心對(duì)應(yīng)的否定形式 來(lái)構(gòu)建洲赵。
→ count — 計(jì)算滿足條件的元素的個(gè)數(shù),和 lter 相似商蕴,但是不會(huì)構(gòu)建數(shù)組叠萍。
→ indicesOf—返回一個(gè)包含滿足某個(gè)標(biāo)準(zhǔn)的所有元素的索引的列表,和indexOf類(lèi)似绪商, 但是不會(huì)在遇到首個(gè)元素時(shí)就停止苛谷。
→ takeWhile—當(dāng)判斷為真的時(shí)候,將元素濾出到結(jié)果中格郁。一旦不為真腹殿,就將剩余的拋 棄独悴。和 lter 類(lèi)似,但是會(huì)提前退出赫蛇。這個(gè)函數(shù)在處理無(wú)限序列或者是延遲計(jì)算 (lazily-computed) 的序列時(shí)會(huì)非常有用。
→ dropWhile—當(dāng)判斷為真的時(shí)候雾叭,丟棄元素悟耘。一旦不為真,返回將其余的元素织狐。和 takeWhile 類(lèi)似暂幼,不過(guò)返回相反的集合。 - 找特定元素的擴(kuò)展 移迫,配合guard使用
extension Sequence {
func ndElement (match: (Iterator.Element)->Bool) -> Iterator.Element? {
for element in self where match(element) { return element
}
return nil
}
}```
5. 有意思的累加
extension Array {
func accumulate<U>(initial: U, combine: (U, Element) -> U) -> [U] {
var running = initial
return self.map { next in
running = combine(running, next)
return running }
} } ```
- Filter過(guò)濾所有結(jié)果,Swift 內(nèi)建的用來(lái)代表參數(shù)的簡(jiǎn)寫(xiě) $0
fbs. flter { num in num%2==0}
簡(jiǎn)化代碼可以寫(xiě)成這樣fbs. flter { $0%2==0}
實(shí)現(xiàn)
func lter (includeElement: Element -> Bool) -> [Element] {
var result: [Element] = []
for x in self where includeElement(x) {
result . append(x) }
return result }
}```
extension SequenceType {
public func allMatch(predicate: Generator.Element -> Bool) -> Bool {
// 對(duì)于一個(gè)條件旺嬉,如果沒(méi)有元素不滿足它的話,那意味著所有元素都滿足它:
return !self.contains { !predicate($0) } }
}```
- reduce操作
extension Array {
func reduce<U>(initial: U, combine: (U, Element) -> U) -> U {
var result = initial; for e in self {result = combine(result,e)
}
return result
}
}
c.reduce(initial: 0) { (totoal, p) -> Int in
totoal + p
}