大多数情况下,如果我们想要获取数组中某一段的内容(比如说从前到中间,或者数组最后的某些值),这时候就需要遍历数组来给新的数组赋值:
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 中本身就提供了对数组进行拆分的功能,这个机制是一个叫做 SubSequence 的类型,它提供了数组的子序列:
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