3.4.1 數組
所謂數組,就是將相反數據類型的元素,按一定順序停止陳列的集合,就是把無限個類型相反的變量用一個名字命名,然後用編號區分它們的變量集合,這個名字被稱為數組名,編號稱為數組的下標。
組成數組的各個變量稱為數組的重量,也稱為數組的元素,有時也被稱為下標變量。Swift數組是在順序設計中,為了處置方便,把具有相反類型的若干變量,按有序的方式組織起來的一種方式,這些按序陳列的同類數據元素的集合稱為Swift數組。
Swift 數組對存儲數據有詳細要求。不同於Object-C的NSArray和NSMutableArray類,它們可以存儲任何類型的實例,而且不提供他們前往對象的任何實質信息。
數組的創立
在Swift中,數據值在被存儲進入某個數組之前,數據的類型必需明白,辦法是經過顯式的類型標注或類型推斷:
1 let stringArray =Array<String>() 2 let floatArray = [Float]() 3 let intArry = [1, 2, 3, 4, 5]
在第一行代碼中,經過運用命名型類型Array<SomeType>,創立了一個字符串類型的數組,其中SomeType是這個數組中獨一允許存在的數據類型。
在第二行代碼中,我們運用了像SomeType[]這樣的復雜語法,創立了一個類型為浮點數的數組floatArray。
後面兩種辦法都是經過顯示的類型標注,創立指定類型的數組。在第三行代碼中,經過給常量設置默許值,從而由Swift對其類型作出推斷。由於一切值都是整數類型,所以數組的類型被推斷為整型數組。
數組的訪問和查找
數組中元素的訪問,是經過下標語法完成的:
1 let stringArray =Array<String>() 2 let floatArray = [Float]() 3 let intArry = [1, 2, 3, 4, 5]
經過運用數組的只讀屬性count和isEmpty,可以獲取數組中的元素數量:
1 intArry.isEmpty //判別數組能否為空,後果為:false 2 intArry.count //取得數組中元素的數量,後果為:5
經過運用數組的contains()辦法,可以判別數組中能否存在某個元素:
1 intArry.contains(3) //判別數組中能否存在3,後果為:true
數組的編輯
在Swift中,您可以運用數組的append()辦法,或許直接運用加號+,往已有的數組中添加新的元素:
1 var intArry = [1, 2, 3, 4, 5] 2 intArry += [6] //intArray的元素:[1, 2, 3, 4, 5, 6] 3 intArry.append(7) //intArray的元素:[1, 2, 3, 4, 5, 6, 7]
假如需求在數組的兩頭的地位添加新的元素,可以運用insert()辦法,新的元素將被拔出到數組中指定的index地位,該地位原來的元素將順次右移:
1 intArry.insert(100, at: 2) // intArray的元素:[1, 2, 100, 3, 4, 5, 6, 7]
在Swift中修正數組中的某個元素,也是十分復雜的。首先運用下標定位到需求修正的元素,然後直接給元素指定新的值即可:
1 intArry[2] = 9 // intArray的元素:[1, 2, 9, 3, 4, 5, 6, 7]
運用這種方式,甚至可以一次性同時修正數組中的多個元素的值:
1 intArry[3...5] = [8, 8, 8] // intArray的元素:[1, 2, 9, 8, 8, 8, 6, 7]
Swift數組提供了幾種remove辦法,用來刪除數組中的元素:
1 intArry.removeFirst() // intArray的元素:[2, 9, 8, 8, 8, 6, 7] 2 intArry.removeLast() // intArray的元素:[2, 9, 8, 8, 8, 6] 3 intArry. remove(at: 2) //intArray的元素:[2, 9, 8, 8, 6] 4 intArry.removeSubrange(Range(1..<3)) // intArray的元素:[2, 8, 6] 5 intArry.removeAll() // intArray的元素:[]
數組的排序
絕對於Object-C言語來說,在Swift中對數組停止排序變得極為復雜:
1 var intArry = [11, 22, 3, 14,25] 2 print(intArry.sort()) // 輸入的後果:[3, 11, 14, 22, 25]
sort()辦法默許是按升序停止陳列,假如想依照降序對數組停止陳列:
1 intArry.sort(isOrderedBefore:>) // 輸入的後果:[25, 22, 14, 11, 3]
對擁有復雜類型元素的數組停止排序,也是十分復雜的,在上面的例子中,創立了一個包括三個元組對應的數組,並且依照元組中姓名的升序停止陳列:
1 var userList = [(name: "Thomas", age: 20), (name: "John", age: 32), (name: " Bill",age: 28)] 2 userList.sort(isOrderedBefore:{$0.name > $1.name}) userList排序後的後果為:[("Bill",28), ("John", 32), ("Thomas", 20)]。
3.4.2 多維數組
多維數組是指在數組中,依然存在其它的數組。
您可以將多維數組了解為,經過幾次索引可以找到存儲的值就為幾維數組,例如在一維數組userList中,經過一個索引值userList [0],就可以查到第一個用戶。在二維數組userList2,就需求兩次索引userList [0][0],才可以查到第一個用戶。
多維數組的創立,與一維數組相似,以下代碼定義了一個包括整數元素的二維數組:
1 var intArray = [[Int]]()
異樣可以經過指定初始值的辦法,創立一個多維數組:
1 let numbers = [[1, 2, 3], [4,5, 6, 7]]
和一維數組一樣,可以運用append()辦法,往多維數組中添加更多的數組元素:
1 var numbers = [[1, 2, 3], [4,5, 6, 7]] 2 numbers.append([8,9,10]) //numbers的元素:[[1, 2, 3], [4, 5, 6, 7], [8, 9, 10]]
那麼如何獲取多維數組中的元素呢?假設您需求取得numbers數組中的8這個數字,首先經過numbers[2]取得[8, 9, 10]數組,然後經過numbers[2][0]取得[8, 9, 10]數組中的第一個元素。
即經過numbers[2][0]取得第三個子數組中的第一個元素:8。
3.4.3 數組的遍歷
在上面的代碼中,運用..<符號,遍歷數組從0至4之間的一切元素:
1 var numbers = [1, 2, 3, 4, 5] 2 for index in 0 ..<numbers.count 3 { 4 print(numbers[index]) 5 }
數組的遍歷其實可以愈加復雜:
1 var numbers = [1, 2, 3, 4, 5] 2 for num in numbers 3 { 4 print(num) 5 }
假如僅需遍歷指定范圍內的數組元素,可以經過定義Range的辦法來完成:
1 var numbers = [1, 2, 3, 4, 5] 2 let range = 2..<numbers.count 3 for (index, value) inzip(range, numbers[range]) 4 { 5 print("\(index): \(value)") 6 }
關於包括復雜元素的數組停止遍歷,也是十分復雜的事情:
1 let scores =["Jerry":78, "Thomas":88, "John":92] 2 for (student, score) in scores 3 { 4 print(student + "' score is\(score)") 5 }
經過for-in語句,也能很方便地完成對多維數組的遍歷:
1 var numbers = [[1, 2, 3],[4, 5,6, 7]] 2 for subNumbers in numbers 3 { 4 for number in subNumbers 5 { 6 print(number) 7 } 8 }
一團體寫書,難免會有缺乏和纰漏,歡送大家經過這個郵箱:[email protected]
將你的意見和建議通知我們,感激!
關注我的微信大眾號“酷課堂”,獲取更多學習資源,歡送留言交流。
【圖書連載15:數組】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!