Swift中Array冷門方法拾遺

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"

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末厌衙,一起剝皮案震驚了整個濱河市距淫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌婶希,老刑警劉巖榕暇,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡彤枢,警方通過查閱死者的電腦和手機撤蟆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來堂污,“玉大人,你說我怎么就攤上這事龄砰∶瞬” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵换棚,是天一觀的道長式镐。 經(jīng)常有香客問我,道長固蚤,這世上最難降的妖魔是什么娘汞? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮夕玩,結果婚禮上你弦,老公的妹妹穿的比我還像新娘。我一直安慰自己燎孟,他們只是感情好禽作,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著揩页,像睡著了一般旷偿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上爆侣,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天萍程,我揣著相機與錄音,去河邊找鬼兔仰。 笑死茫负,一個胖子當著我的面吹牛,可吹牛的內容都是我干的乎赴。 我是一名探鬼主播朽褪,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼无虚!你這毒婦竟也來了缔赠?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤友题,失蹤者是張志新(化名)和其女友劉穎嗤堰,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡踢匣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年告匠,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片离唬。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡后专,死狀恐怖,靈堂內的尸體忽然破棺而出输莺,到底是詐尸還是另有隱情戚哎,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布嫂用,位于F島的核電站型凳,受9級特大地震影響,放射性物質發(fā)生泄漏嘱函。R本人自食惡果不足惜甘畅,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望往弓。 院中可真熱鬧疏唾,春花似錦、人聲如沸函似。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缴淋。三九已至准给,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間重抖,已是汗流浹背露氮。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留钟沛,地道東北人畔规。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像恨统,于是被迫代替她去往敵國和親叁扫。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內容

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