Swift入門 - 數組實戰

數組作為程序中最常使用的對象之一,在任何程序語言中數組的重要性不言而喻,在Swift中也不例外。

數組是相同數據類型的元素的集合,數組中的各元素是有先后順序的,它們在內存中按照這個先后順序連續存放在一起, 且數組支持添加,刪除,修改和遍歷數組內的元素。

西游記

程序樣例 - 可在Playground內編譯運行

//創建數組
//西游團隊的主要成員唐三藏,孫悟空,豬悟能和沙悟凈。
var members: [String] = ["唐三藏", "孫悟空", "豬悟能","沙悟凈"]

//訪問數組內元素
print( "大師兄 \(members[1])" )
print( "師傅是 \(members.first)" )
print( "三師弟 \(members.last)" )

//修改數組
//孫悟空在三打白骨精事件后離開團隊。
members.remove(at: 1)

//孫悟空在寶象國事件后又加入團隊。
members.insert("孫悟空", at: 1)

//遍歷數組,依次輸出成員。
for (index, member) in members.enumerated() {
    print( "第\(index)位團隊成員 == \(member)" )
}

//數組長度
print("團隊成員共 == \(members.count) 位")

//九九八十一難后,團隊成員修成正果,團隊解散。
members.removeAll()
//數組是否為空
print("團隊解散 = \(members.isEmpty)")

程序分析

1. 創建數組

上述樣例中體現創建數組的代碼片段如下,其創建了一個包含4個字符串的數組。

var members: [String] = ["唐三藏", "孫悟空", "豬悟能","沙悟凈"]

其實Swift中針對不同的場景提供了多種初始化的方式, 如你可以通過如下初始化語法創建一個指定數據類型的空數組:

var someStrings = [String]()

var someStrings: [String] = []

其中的String可根據需要替換成任意數據類型,如Int。

var someInts = [Int]()

var someInts: [Int] = []

Swift還提供另一種初始化方式,在新生成數組中包含指定數量且重復的值。

let fiveMonkeys = Array(repeating: "孫悟空", count: 3)
 //輸出 ["孫悟空", "孫悟空", "孫悟空"]"
2. 訪問數組

和其他編程語言一樣,Swift 也是通過下標檢索數組內的元素。

var someVar = someArray[索引]

上述中的索引從0開始計數,通過索引 0 可以獲取數組內的第 1 個元素,而第 2 個元素可以通過索引 1 獲取,諸如此類,直到數組結束。

注意,索引的使用要注意是否超出當前數組邊界,否則會導致程序崩潰。

Swift 提供了更優雅的方式來獲取第一個元素(.first)和最后一個元素(.last),且其返回的是可選型值。

開頭的程序樣例已經展示了如何訪問數組:

print( "大師兄 \(members[1])" ) // "孫悟空"
print( "師傅是 \(members.first)" )  //"唐三藏"
print( "三師弟 \(members.last)" )  // "沙悟凈"
3. 修改數組

在使用數組的時候,會經常遇到需要修改數組內元素的場景。

需要向數組末端添加新的元素的時候,可以使用 append()方法或 加法賦值運算符( += )。

//初始化空數組。
var members: [String] = []
//使用append() 添加新元素。
members.append("唐三藏")

var subMembers: [String] = ["孫悟空", "豬悟能","沙悟凈"]
//使用加法賦值運算符添加新元素。
members += subMembers
//也可以寫為 members = members + subMembers

當向數組中指定位置插入新的元素時,可以使用方法 insert(), 而新的元素會插入在指定索引的前面。

var members: [String] = ["唐三藏", "豬悟能","沙悟凈"]
//數組內容為 "唐三藏", "豬悟能","沙悟凈"
members.insert("孫悟空", at: 1)
//插入新的元素后,數組內容為"唐三藏", "孫悟空", "豬悟能","沙悟凈"

當然如果需要修改數組中指定索引的值,也是很容易操作的。

var members  = ["唐三藏","孫悟空", "豬悟能","沙悟凈"]
//六耳獼猴用偷天換日之法替換了孫悟空
members[1] = "六耳獼猴"
//這時團隊成員是 ["唐三藏","六耳獼猴", "豬悟能","沙悟凈"]

當需要移除目標數組內的元素時,可以使用方法removeAll()移除所有元素,也可以使用方法.remove(at: _) 移除指定索引的元素。

var members: [String] = ["唐三藏", "孫悟空", "豬悟能","沙悟凈"]  
//當前數組內容為"唐三藏", "孫悟空", "豬悟能","沙悟凈"

//孫悟空在三打白骨精事件后離開團隊。
members.remove(at: 1)
//當前數組內容為"唐三藏", "豬悟能","沙悟凈"

members. removeAll()
//當前數組內容為空
4. 遍歷數組

我們可以使用for-in來遍歷數組。

當需要獲取每個元素的索引, 這時用用導函數enumerate(), 其實這種在開頭中的程序樣例中已經展示了此用法。

for (index, member) in members.enumerated() {
    print( "\(index) == \(member)" )
}
//運行上述程序會依次輸出每個元素和索引。
//第1位團隊成員 == 唐三藏
//第2位團隊成員 == 孫悟空
//第3位團隊成員 == 豬悟能
//第4位團隊成員 == 沙悟凈

5. 更多

只讀屬性count用來返回數組內所有元素的個數,主程序中也有count的用例。

print(members.count)
//由于當前數組內的元素是 ["唐三藏", "孫悟空", "豬悟能","沙悟凈"],  count會返回 4。

只讀屬性isEmpty用來表示當前數組是否為空。

print("團隊解散 = \(members.isEmpty)")

結合上面的count屬性,也可換一種寫法, 不過顯然使用isEmpty更優雅。
print("團隊解散 = \(members.count == 0)")
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,993評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,990評論 2 374

推薦閱讀更多精彩內容