Swift中 ArraySlice(数组切片)的创建和操作

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]
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值