Swift - Collection Types - Array / Set / Dictionary

數(shù)組 — Array

通過一個默認值重復創(chuàng)建數(shù)組

/// 創(chuàng)建一個重復元素為 0.0 且元素個數(shù)為 3 的數(shù)組
var threeDoubles = Array(repeating: 0.0, count: 3)
/// 創(chuàng)建一個重復元素為 0.1 且元素個數(shù)為 3 的數(shù)組
var anotherThreeDoubles = Array(repeating: 0.1, count: 3)

創(chuàng)建遞增數(shù)組

/// 新建一個 0 到 3 的遞增數(shù)組,每次遞增 1
var increasing  = Array(0...3)
/// 新建一個 0 到 5 的遞增數(shù)組历恐,每次遞增 1
var increasingByOne = Array(stride(from: 0.0, through: 5.0, by: 1.0))
/// stride(from: through: by: ) 包括 from饺汹、through 兩個 element
/// stride(from: to: by: ) 包括 from, 但是不包括 to

通過兩個數(shù)組創(chuàng)建一個新的數(shù)組

var sixDoubles = threeDoubles + anotherThreeDoubles

通過字面量創(chuàng)建

var shoppingList: [String] = ["Eggs", "Milk"]

由于 Swift 的數(shù)據(jù)推斷橡伞,初始化的時候可以不加數(shù)據(jù)類型

var shoppingListNew = ["Eggs", "Milk"]

訪問和修改數(shù)組

shoppingList.count
shoppingList.isEmpty
shoppingList.append("Flour")
shoppingList += ["Baking Powder"]
shoppingList += ["Chocolate Spread", "Cheese", "Butter"]
var firstItem = shoppingList[0]
shoppingList[0] = "Six eggs"
shoppingList[4...6] = ["Bananas", "Apples"] // 4.5.6 -> 4.5
shoppingList.insert("Maple Syrup", at: 0)
var returnRemoveString = shoppingList.remove(at: 0)
var returnRemoveLast = shoppingList.removeLast()

遍歷

for item in shoppingList {
    print(item)
}

同時獲取 index 和 item

for (index, item) in shoppingList.enumerated() {
    print("Item \(index + 1): \(item)")
}

集合 — Set

存儲不同值并且相同類型檩赢、不排序

Hash Values for Set Types

  • 類型必須是以 Hashable 以存儲在集合中昼蛀,Int 類型
  • if a == b雀瓢,a.hashable == b.hashable
  • 使用自定義類型作為集合值類型或者字典key類型梅掠,遵循 Hashable
  • 遵循 Hashable 協(xié)議必須提供 get Int hashValue酌住,該值不需要在相同程序或者不同程序的不同執(zhí)行中相同
  • Hashable 遵循 Equatable,所以還必須提供一個 == 操作符的實現(xiàn)
  • == 必須滿足三個條件:
    (1)a == a 自反性
    (2)a == b 等效于 b == a
    (3)a == b && b == c 等效于 a == c

創(chuàng)建和實例化空集合

var letters = Set<Character>()
letters.insert("a")
letters = []
var favoriteGenres: Set<String> = ["Rock", "Classical", "Hip hop"]
// 不能從一個數(shù)組字面量被推斷為 Set 數(shù)據(jù)類型阎抒,必須顯示聲明
// but 不需要寫 set 中  的類型
let favoriteGenresNew: Set = ["Rock", "Classical", "Hip hop"]

訪問和修改集合

favoriteGenres.count
favoriteGenres.isEmpty
favoriteGenres.insert("Jazz")
if let removedGenre = favoriteGenres.remove("Rock") {
    print("\(removedGenre)? I'm over it")
}else {
    print("I never much cared for that")
}
if favoriteGenres.contains("Funk") {
    print("I get up on the good foot.")
}else {
    print("It's too funky in here")
}

遍歷集合

for genre in favoriteGenres {
    print("\(genre)")
}

for genre in favoriteGenres.sorted() { // < 排序
    print("\(genre)")
}

集合操作

var a: Set = Set<String>()
var b: Set = Set<String>()
a.intersection(b) // 交集酪我,共有部分
a.symmetricDifference(b) // 非共有部分總和
a.union(b) // 并集,a + b
a.subtracting(b) // a - a.intersection(b)(交集)
a == b // a 和 b 有所有相同值
a.isSubset(of: b) // a 是不是 b 的子集
a.isSuperset(of: b) // a 是不是 b 的父集
a.isStrictSubset(of: b) // a 是不是 b 的子集且叁,但是不等于 b
a.isStrictSuperset(of: b) // a 是不是 b 的父集都哭,但是不等于 b
a.isDisjoint(with: b) // a 和 b 沒有公共部分

字典 — Dictionary

var namesOfIntegers = [Int: String]() // 空數(shù)組
namesOfIntegers = [:] // 空數(shù)組
var airports: [String: String] = ["YYZ": "Toronto Person", "DUB": "Dublin"] // key: value

訪問和修改字典

airports.count
if airports.isEmpty {
    print("The airports dictionary is empty")
} else {
    print("The airports dictionary is not empty")
}

airports["LHR"]  = "London"http:// 添加一個新值 或 修改值
var returnOldValue = airports.updateValue("London", forKey: "LHR") // 添加一個新值 或 修改值
if let oldValue = airports.updateValue("Dublin Airport", forKey: "DUB") {
    print("The old value for DUB was \(oldValue).")
}

if let airportName = airports["DUB"] {
    print("The name of the airport is \(airportName)")
} else {
    print("The airport is not in the airports dictionary")
}

移除

airports["APL"] = nil
if let removedValue = airports.removeValue(forKey: "DUB") {
    print("The removed airport's name is \(removedValue)")
} else {
    print("The airport dictionary does not contain a value for DUB")
}

遍歷

for (airportCode, airportName) in airports {
    print("\(airportCode) : \(airportName)")
}
// 取出 keys, values
for airportCode in airports.keys.sorted() {
    print("Airport code: \(airportCode)")
}

for airportName in airports.values.sorted() {
    print("Airport code: \(airportName)")
}

keys,values 初始化數(shù)組

let airportName = [String](airports.values)
let airportCode = [String](airports.keys)
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末逞带,一起剝皮案震驚了整個濱河市欺矫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌展氓,老刑警劉巖穆趴,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異遇汞,居然都是意外死亡未妹,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門空入,熙熙樓的掌柜王于貴愁眉苦臉地迎上來络它,“玉大人,你說我怎么就攤上這事歪赢±腋” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵轨淌,是天一觀的道長。 經(jīng)常有香客問我看尼,道長递鹉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任藏斩,我火速辦了婚禮躏结,結果婚禮上,老公的妹妹穿的比我還像新娘狰域。我一直安慰自己媳拴,他們只是感情好黄橘,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著屈溉,像睡著了一般塞关。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上子巾,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天帆赢,我揣著相機與錄音,去河邊找鬼线梗。 笑死椰于,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的仪搔。 我是一名探鬼主播瘾婿,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼烤咧!你這毒婦竟也來了馍盟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤萝衩,失蹤者是張志新(化名)和其女友劉穎葡兑,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體立膛,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡揪罕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了宝泵。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片好啰。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖儿奶,靈堂內(nèi)的尸體忽然破棺而出框往,到底是詐尸還是另有隱情,我是刑警寧澤闯捎,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布椰弊,位于F島的核電站,受9級特大地震影響瓤鼻,放射性物質(zhì)發(fā)生泄漏秉版。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一茬祷、第九天 我趴在偏房一處隱蔽的房頂上張望清焕。 院中可真熱鬧,春花似錦、人聲如沸秸妥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽粥惧。三九已至键畴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間影晓,已是汗流浹背镰吵。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留挂签,地道東北人疤祭。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像饵婆,于是被迫代替她去往敵國和親勺馆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1. 修改默認的HttpInvokerRequestExecutor 默認的HttpInvokerRequestE...
    風之舞者II閱讀 1,105評論 0 0
  • 公眾號L先生說《建立知識體系侨核,這份指南就夠了》輸出 知識體系是什么草穆? 是大量的知識,有序的結構 一般我們學一樣東西...
    新伊2017閱讀 341評論 0 0
  • 一位引人注目的年輕女士拿著白色手杖搓译,小心翼翼地踏上公交車悲柱。車內(nèi)乘客充滿同情的看著她。她買票些己,用手摸著找司機告訴她的...
    大象的印象閱讀 5,400評論 27 137
  • 習慣30天養(yǎng)成結束有10天了段标,終于抽出時間來總結一下這30天的習慣養(yǎng)成涯冠。寫總結挺好的,當安靜下來逼庞,坐到桌子前面蛇更,隨...
    北方榮榮閱讀 262評論 1 1
  • 《讀報紙的人》這本書主要講的是小男孩兒成長為男人的故事派任。 故事發(fā)生在一個寧靜的小鎮(zhèn)上。叫弗朗茲的男孩和母親兩人相依...
    白日夢想家_09閱讀 555評論 2 3