DAY6:Collection Types

調用insert(_:atIndex:)方法在某個具體的索引值之前添加數據項:

var shoppingList = ["milk","eggs"]
shoppingList.insert("maple syrup", atIndex: 0)

在索引是0得位置插上了“maple syrup”

類似的我們可以用removeAtIndex(_:)方法來移除數組中得某一項瓷炮,這個方法在特定的索引中移除該項,并且返回這個被移除的數據項(不需要的時候就可以無視它):

var shoppingList = ["maple syrup","milk","eggs"]
let mapleSyrup = shoppingList.removeAtIndex(0)

mapleSyrup的值為"maple syrup",shoppingList被移除了首個元素。
我們可以用removeLast()方法來移除最后一項,這個方法返回的也是移除的那一個內容:

let eggs = shoppingList.removeLast()

數組的遍歷

我們可以使用for-in循環(huán)來遍歷所有數組中得數據項:

var shoppingList = ["maple syrup","milk","eggs"]
for item in shoppingList{
        print(item)
}

如果我們同時需要數據項的值和索引值呼渣,可以使用enumerate()方法來遍歷數組,該方法返回的是一個元組,我們可以把這個元組分解成臨時常量或者變量來進行遍歷:

var shoppingList = ["maple syrup","milk","eggs"]
for (index,value) in shoppingList.enumerate(){
        print("Item \(String(index + 1)): \(value)")
}

集合(Sets)

集合是用來存儲相同類型的并且沒有確定順序的值歇式,當集合元素順序不重要的時候且確保每個元素只出現一次的時候,我們就使用集合而不是數組胡野。

注意:swift中得Set被橋接到Foundation中得NSSet類材失。
關于使用Foundation和Cocoa中得Set知識,請看Using Swift with Cocoa and Objective-c硫豆。

集合類型的哈希值

一個類型為了存儲在集合中龙巨,該類型必須是可哈希化的熊响,也就是說該類型必須提供一個方法來計算它的哈希值旨别,一個哈希值是Int類型的,相等的對象Hash值必須相同汗茄,比如說a==b秸弛,也就是說a.hashValue = b.hashValue。
Swift中所有的基本類型(String洪碳,Int递览,Double,Bool)默認都是可以哈贤纾化的绞铃,可以作為集合的值或者字典的值的類型,沒有關聯(lián)值的枚舉成員值默認也是可以hash化的嫂侍。

注意:你可以使用自定義的類型作為集合的值的類型憎兽,或者是字典的鍵的類型,但是你需要使你的自定義類型符合swift標準庫的Hashable協(xié)議吵冒,符合Hashable協(xié)議的類型需要提供一個類型是Int得可讀屬性hashValue纯命。由類型hashValue屬性返回的值不需要在同一程序的不同執(zhí)行周期或者不同程序之間保持相同。
因為Hashable協(xié)議符合Equatable協(xié)議痹栖,所以符合該協(xié)議類型也必須要提供一個“是否相等”運算符(==)的實現亿汞。這個Equatable協(xié)議要求任何符合==實現的實例間都是一種相等的關系,就是說揪阿,對已a疗我,b咆畏,c這三個值來說,==的實現必須滿足:

  1. a == a(自反性)
  2. a == b意味著b == a(對稱性)
  3. a == b && b == c 意味著 a == c(傳遞性)

集合類型的語法

swift中得Set類型被寫作Set<Element>,這里的Element表示Set中允許存儲的類型吴裤,和數組不同的是集合沒有等價的簡化形式旧找。

創(chuàng)建和構造一個空的集合

你可以通過構造器語法創(chuàng)建一個特定類型的空集合,如果上下文提供了類型信息麦牺,比如作為函數的參數或者已知類型的變量或者常量钮蛛,我們可以通過一個空的數組的字面量創(chuàng)建一個空的Set:

var letters = Set<Character>()
print("letters is of type Set<Character> with \(letters.count) items.")
//打印 "letters is of type Set<Character> with 0 items."
letters.insert("a")
//集合中插入“a”
letters = []
//letters現在是一個空得Set,但它仍然是Set<Character>類型
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末剖膳,一起剝皮案震驚了整個濱河市魏颓,隨后出現的幾起案子,更是在濱河造成了極大的恐慌吱晒,老刑警劉巖甸饱,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異仑濒,居然都是意外死亡叹话,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門墩瞳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來驼壶,“玉大人,你說我怎么就攤上這事矗烛。” “怎么了箩溃?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵瞭吃,是天一觀的道長。 經常有香客問我涣旨,道長歪架,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任霹陡,我火速辦了婚禮和蚪,結果婚禮上,老公的妹妹穿的比我還像新娘烹棉。我一直安慰自己攒霹,他們只是感情好,可當我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布浆洗。 她就那樣靜靜地躺著催束,像睡著了一般。 火紅的嫁衣襯著肌膚如雪伏社。 梳的紋絲不亂的頭發(fā)上抠刺,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天塔淤,我揣著相機與錄音,去河邊找鬼速妖。 笑死高蜂,一個胖子當著我的面吹牛,可吹牛的內容都是我干的罕容。 我是一名探鬼主播备恤,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼杀赢!你這毒婦竟也來了烘跺?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤脂崔,失蹤者是張志新(化名)和其女友劉穎滤淳,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體砌左,經...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡脖咐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了汇歹。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片屁擅。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖产弹,靈堂內的尸體忽然破棺而出派歌,到底是詐尸還是另有隱情,我是刑警寧澤痰哨,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布胶果,位于F島的核電站,受9級特大地震影響斤斧,放射性物質發(fā)生泄漏早抠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一撬讽、第九天 我趴在偏房一處隱蔽的房頂上張望蕊连。 院中可真熱鬧,春花似錦游昼、人聲如沸甘苍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽羊赵。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間昧捷,已是汗流浹背闲昭。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留靡挥,地道東北人序矩。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像跋破,于是被迫代替她去往敵國和親簸淀。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內容