大多數情況下,如果我們想要獲取數組中某一段的內容(比如說從前到中間,或者數組最後的某些值),這時候就需要遍歷數組來給新的數組賦值:
1 2 3 4 5 6 7 |
let fixedArray = [1,2,3,4,5,6] var myArray:[Int] = [] for (i,n) in fixedArray.enumerate() { if i > 3 {break} myArray.append(n) } |
這樣數組短了還好說無所謂,但如果數組比較大而我們需要的值又比較多,那遍歷起來顯然就很浪費時間。
Swift 中本身就提供了對數組進行拆分的功能,這個機制是一個叫做 子 的類型,它提供了數組的子序列:
1 2 |
public func prefix(maxLength: Int) -> Self.SubSequence public func suffix(maxLength: Int) -> Self.SubSequence |
顯然,這裡提供了一個從前或者從後開始指定數量的數組拆分,其實還有更多的拆分方法這裡我就不多贅述,大家可以到 Xcode 裡看具體的聲明。
不過值得一提的就是,拆分出來的子序列,依然保持了原來數組的索引值——當然,數組是值類型,所以對子序列的操作並不會影響原來的數組:
1 2 3 4 5 |
var sub = fixedArray.suffix(2) sub[5] = 8 print(sub[5]) print(fixedArray) |
這裡我們從後往前取兩個值出來,可見子序列的下標索引依然是之前數組 fixedArray 的延續,我把字序列聲明為了變量,可以修改之,而原本的數組值依舊不變。
這個時候如果要使用子序列那麼就直接用了,它有著與數組完全一致的方法。
但是
它不能被當作數組來使用,它也沒有返回一個數組的方法!
1 2 3 |
error: cannot assign value of type 'ArraySlice<Int>' to type '[Int]' someArray = sub ^~~ |
要重新賦值給一個數組類型變量,那你必須使用數組的初始化器來把它初始化了:
1 2 |
var someArray:[Int] = [] someArray = Array(sub) |
那麼,最後我們來演示一下如何快速從一個數組裡取出其中前三個值作為一個新的數組:
1 2 3 4 |
let fixedArray = [1,2,3,4,5,6] var myArray:[Int] = Array(fixedArray.prefix(3)) |
是的,只需要一句話。
延伸閱讀
本文由 落格博客 原創撰寫:落格博客 » Swift 中切分數組
轉載請保留出處和原文鏈接:https://www.logcg.com/archives/1936.html