Swift Tips - Array 類型


在開發中,數組這個概念我們應該很熟悉了,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 方法

Arrayreverse 方法可以將數組中的元素倒序排列:

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

更多好文,掃碼關注微信公眾號:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM