在開發中,數組這個概念我們應該很熟悉了,Objective-C 中為我們提供了 NSArray 作為數組的實現。大家應該對很熟悉了。而在 Swift 中,為我們提供了它自己對於數組的實現,也是這里我們要介紹的,就是 Array 類。
Array 的官方文檔可以參看這里: SwiftStandardLibraryReference
廢話不多說,下面就開始我們的主題啦。
<!-- more -->
創建數組
我們要使用一個數組,首先要做的就是創建它,Array 類為我們提供了幾種方式來創建:
var emptyArray = Array<Int>()
我們這里聲明了一個空的數組,數組的元素是 Int 類型,我們還可以這樣初始化數組:
var equivalentEmptyArray = [Int]()
這樣的寫法和前面那個的效果是一樣的。我們還可以這樣進行初始化:
let numericArray = Array(count: 4, repeatedValue: 5)
// 數組元素為 [5,5,5,5]
這個初始化方法,里面使用 4 個數字 5 來填充這個數組,並且數組元素的類型為 Int。
訪問數組的元素
我們的數組創建完成后,我們就可以通過下標來引用它里面的元素了:
var weekdays = ["monday","tuesday","wednesday","thursday"]
println(weekdays[1]) //輸出 tuesday
我們還可以通過下標來修改數組中的元素:
var weekdays = ["monday","tesday","today","thursday"]
weekdays[2] = "wednesday"
//修改后的數組元素 ["monday","wednesday","today","thursday"]
但我們不能通過下標修改 let 關鍵字定義的常量數組:
let weekdays = ["monday","tesday","today","thursday"]
weekdays[2] = "wednesday" //報錯
Swift 還提供了范圍的下標訪問:
let weekdays = ["monday","wednesday","today","thursday"]
let subdays = weekdays[0...2]
//subdays 的數組元素 ["monday","wednesday","today"]
我們用 arr[0...2] 這種形式的索引,就可以訪問到數組中某一區域的元素了,這點從上面的例子中就能看出來啦。
我們甚至還可以用范圍索引來設置數組的元素,前提是這個數組是用 var 定義的:
var weekdays = ["monday","wednesday","today","thursday"]
weekdays[0...1] = ["today","tomorrow"]
//數組的元素 ["today","tomorrow","today","thursday"]
添加刪除元素
Swift 中的 Array 還為我們提供幾個相關的方法,append 用於向數組添加元素,添加的元素在數組的最后。insert 方法向數組指定的索引插入元素, removeAtIndex 方法用來刪除指定索引位置的元素。 removeLast 用於刪除數組最后一個元素。我們來看一下如何使用這些方法:
var numbers = [2,4,6,8,10]
numbers.append(12) //numbers: [2,4,6,8,10,12]
numbers.insert(5, atIndex: 2) //numbers: [2, 4, 5, 6, 8, 10, 12]
numbers.removeAtIndex(4) //numbers: [2, 4, 5, 6, 10, 12]
numbers.removeLast() //numbers: [2, 4, 5, 6, 10]
這幾個方法使用起來非常方便,也滿足了我們對數組的大部分操作要求,接下來我們繼續。
查詢數組狀態
Array 提供了 count 屬性來返回數組當前的元素個數。 isEmpty 屬性用於判斷數組是否為空。
var array = [5,4,3,2,1]
println(array.count) // 5
println(array.isEmpty) // false
array = []
println(array.isEmpty) // true
數組算法操作
sort 方法
除了上面那些使用的方法,Array 還提供了幾個方便的算法操作,sort 方法用於對數組進行排序,我們可以很輕松的就實現數對數組的升序和降序排列:
var array = [4,5,6,8,3,1,5,7,9]
array.sort {$0 < $1}
print(array) //array: [1, 3, 4, 5, 5, 6, 7, 8, 9]
sort 方法接受一個回調方法,用於返回兩個值的比較順序,我們上面的例子中,判斷第一個參數是否比第二個參數的值小,這樣就形成了一個升序排列。
sorted 方法
Array 還提供了一個 sorted 方法,這個方法和 sort 方法基本一樣,也是接受一個回調方法用於確定元素間的順序。唯一一點不同的是,sort 是對數組本身進行排序,也就是意味着 sort 方法會修改數組本身的內容。 而 sorted 就不會修改原有的數組,而是返回一個經過排序處理后的新的數組:
var array = [4,5,6,8,3,1,5,7,9]
var newArray = array.sorted {$0 < $1}
print(newArray) //array: [1, 3, 4, 5, 5, 6, 7, 8, 9]
使用 sorted 方法后,我們得到了一個新的數組。
reverse 方法
Array 的 reverse 方法可以將數組中的元素倒序排列:
let array = [1, 2, 3, 4, 5]
let reversedArray = array.reverse()
// reversedArray = [5, 4, 3, 2, 1]
通過這個方法,我們將數組中的元素順序顛倒了。
filter 方法
Array 還提供了一個 filter 方法,可以根據傳入的回調方法的判斷標准來篩選數組的元素,並返回一個新的數組:
var array = [1, 2, 3, 4, 5,7,8,9]
var newArr = array.filter({$0 % 2 == 0}) //[2,4,8]
這個 filter 方法,篩選出 array 數組中的所有偶數,並返回給新的 newArr 數組。
map 方法
是不是覺得 Array 提供了很多便捷的方法呢,還遠不止如此呢,這個 map 方法就更加強大了。它能夠根據制定的規則對數組的元素進行處理:
var array = [1,3,5,7]
var newArr = array.map({$0 * 2}) //[2, 6, 10, 14]
這個 map 方法的調用將數組中的所有元素都乘以2,返回了一個新的數組。
怎么樣,非常方便吧,有沒有感覺這些便捷的方法省去了你很多的 for 循環之類的東西呢,從此你的代碼更加簡潔明快了,心情也更為舒暢了吧。接下來我們再來了解一個。
reduce 方法
這個方法更有意思,reduce 的字面為減少執意,用在我們這里就是通過一個處理方法,將數組中所有的元素進行處理,並最終產生一個值:
let array = [1, 2, 3, 4, 5]
let addResult = array.reduce(0) { $0 + $1 }
//addResult: 15
看過上面這段代碼就很明白了吧,通過 { $0 + $1 } 這個閉包方法,我們將數組中所有的元素累加起來,並返回給一個新的變量。
對操作符的支持
到這里,你是不是覺得 Array 很好用呢,還不止如此,Swift 中的 Array 還提供了對操作符的支持,我們可以使用 += 操作符,來對兩個數組進行連接:
var array = [0, 1, 2, 3]
array += [4, 5, 6]
// array is [0, 1, 2, 3, 4, 5, 6]
很方便吧。
好了,講了這么多,相信大家對 Array 類已經有了一個大概的了解了。為我們提供的這些方法,可以很明顯的減少我們的代碼量,提升我們的開發效率。比如我們剛剛提到的 += 操作符的支持。如果沒有這個操作符支持,我們要對兩個數組進行連接的話,我們就需要寫 for 循環,還有好多冗余的代碼。
相信如果大家理解了這些方法的使用,它們就能夠幫助你大大的提高開發效率。起到事半功倍的作用。這篇文章只是對 Array 類的一個大體的介紹,關於 Array,相信還有很多有待發掘的東西,這個機會就交給電腦前的你們了,歡迎大家把在開發過程中關於 Array 的問題和經驗在下面留言和大家一起分享交流。
更多文章請訪問: www.theswiftworld.com
更多好文,掃碼關注微信公眾號: