ArraySlice 的定义
- ArraySlice 是数组或者其他 ArraySlice 的一段连续切片,和原数组共享内存。
- 当要改变 ArraySlice 的时候,ArraySlice 会 copy 出来,形成单独内存。
- ArraySlice 拥有和 Array 基本完全类似的方法
获取 ArraySlice 的操作
1、通过 Drop 得到 ArraySlice
- dropFirst(: ) “移除”原数组前面指定个数的元素得到一个 ArraySlice
- dropLast(: ) “移除”原数组后面指定个数的元素得到一个 ArraySlice
- drop(: ) “移除”原数组符合指定条件的元素得到一个 ArraySlice
var array = [5, 2, 10, 1, 0, 100, 46, 99]
print(array.dropFirst()) //返回移除前面 1 个元素后的数组切片
print(array.dropFirst(3)) //返回移除前面 3 个元素后的数组切片
print(array.dropLast())
print(array.dropLast(3)) //返回移除后面 3 个元素后的数组切片
print(array.drop(while: { $0 < 10})) //移除前面符合给定条件的元素
print(array) //移除操作后,原数组不变
2、通过 prefix 得到 ArraySlice
- prefix() 获取数组前面指定个数的元素组成的 ArraySlice
- prefix(upTo: ) 获取数组到指定位置(不包含指定位置)前面的元素组成的 ArraySlice
- prefix(through: ) 获取数组到指定位置(包含指定位置)前面的元素组成的 ArraySlice
- prefix(while: ) 获取数组前面符合条件的元素(到第一个不符合条件的元素截止)组成的 ArraySlice
var array = [5, 2, 10, 1, 0, 100, 46, 99]
print(array.prefix(3)) //获取前面 3 位元素的数组
print(array.prefix(upTo: 5)) //得不到第五位
print(array.prefix(through: 5)) //可以取到第五位
print(array.prefix(while: { $0 < 10}))
3、通过 suffix 得到 ArraySlice
- suffix() 获取数组后面指定个数的元素组成的 ArraySlice
- suffix(from: ) 获取数组从指定位置到结尾(包含指定位置)的元素组成的 ArraySlice
var array = [5, 2, 10, 1, 0, 100, 46, 99]
print(array.suffix(3))
print(array.suffix(from: 3)) //可以取到第三位
4、通过 Range 得到 ArraySlice
- 可以通过对数组下标指定 Range 获取 ArraySlice,可以使用闭区间、半开半闭区间、单侧区 间、甚至可以只使用 … 来获取整个数组组成的 ArraySlice
var array = [5, 2, 10, 1, 0, 100, 46, 99]
array[3...5]
array[3..<5]
array[...6]
array[..<6]
array[2...]
array[...]
5、ArraySlice 转为 Array
- ArraySlice 无法直接赋值给一个 Array 的常量或变量,需要使用 Array(slice)
var array = [5, 2, 10, 1, 0, 100, 46, 99]
let slice = array[3...5]
//array = slice //这里报错,不能直接将数组切片赋值给数组
//需要使用Array(slice)才可以
array = Array(slice)
print(array)
print(slice)
6、ArraySlice 和原 Array 相互独立
- ArraySlice 和原 Array 是相互独立的,它们添加删除元素不会影响对方
var array = [10, 46, 99]
var slice = array.dropLast()
//print(slice) //输出: [10, 46]
//print(array) //输出: [10, 46, 99]
array.append(33)
slice.append(56)
//它们添加删除元素不会影响对方
print(slice) //输出: [10, 46, 56]
print(array) //输出: [10, 46, 99, 33]