Swift 数组1: 增删改查
2022-05-13 本文已影响0人
YourSummer
1. 数组声明
// 系统识别结果为 array 是一个元素是Int类型的数组
let array = [0, 1, 2, 3, 4, 5, 6, 7, 8]
var array = [0, 1, 2, 3, 4, 5, 6, 7, 8]
// 系统识别为array 是一个元素是字符串类型的数组, 默认是空数组
var array: [String] = []
// 系统识别为array 是一个元素是字符串类型的可选数组
var array: [String]?
// 系统识别为array 是一个元素是字符串类型的可选数组, 默认是nil
var array: [String]? = nil
2. index: 获取下标
// 从下标2开始 往后第3个元素
// 返回对应的下标
let mm = array.index(2, offsetBy: 3)
// limitedBy: 从下标0-下标3范围内查找 从下标1开始, 往后第2个元素
// 返回对应下标, 是一个可选值
let kk = array.index(1, offsetBy: 2, limitedBy: 3)
// 找出元素3 在数组中第一次出现的下标, 返回可选的下标值
let index = array.firstIndex(of: 3)
// 找出元素3 在数组中最后一次出现的下标, 返回可选的下标值
let index = array.lastIndex(of: 3)
3. append: 添加元素
// 添加一个元素, 返回新数组
let newArray = array.append(9)
// 添加多个元素, 返回新数组
let newArray = array.append(contentsOf: [20, 21])
3.1 insert: 插入元素, 改变原数组, 无返回值
// 给下标n位置插入一个元素, n不能越界
array.insert(100, at: 3)
// 给下标n位置插入多个元素, n不能越界
array.insert(contentsOf: [100, 200], at: 3)
4. remove: 删除元素, 改变原数组, 无返回值
if let range = Range(NSRange(location: 0, length: 4)) {
// 删除指定范围的元素
// Range必须解包, 需要注意数组越界crash
array.removeSubrange(range)
}
// 删除所有元素
array.removeAll()
// 删除所有元素, 保持数组的容量不变
array.removeAll(keepingCapacity: true)
// 删除元素值为 3 的元素
array.removeAll { (item) -> Bool in
item == 3
}
// 删除下标为3的元素
array.remove(at: 3)
// 删除最后一个元素
array.removeLast()
// 删除第一个元素
array.removeFirst()
// 逆向删除3个元素
array.removeLast(3)
// 正向删除3个元素
array.removeFirst(3)
5. drop: 丢弃元素, 返回新数组
// 丢弃数组第一个元素, 返回值是新数组
let newArray = array.dropFirst()
// 丢弃数组最后一个元素, 返回值是新数组
let newArray = array.dropLast()
// 逆向丢弃数组5个元素, 返回值是新数组
let newArray = array.dropLast(5)
// 正向丢弃数组5个元素, 返回值是新数组
let newArray = array.dropFirst(5)
// 丢弃符合条件的元素
// 注意 闭包内如果返回了false 则不会继续执行, 按需使用
// 你可以试试将 item != 3 改为 item == 3
var array = [0, 1, 2, 3, 4, 5, 6, 7, 8]
let newArray = array.drop { (item) -> Bool in
print("item = \(item)")
return item != 3
}
print("newArray = \(newArray)")
// log结果:
// item = 0
// item = 1
// item = 2
// item = 3
// newArray = [3, 4, 5, 6, 7, 8]
6. prefix: 正向获取前n个元素, 返回新数组
// 取前n个元素 返回新数组, n可以越界, 越界后返回完整数组
let newArray = array.prefix(3)
// 取下标n之前的元素, 不包含第n个元素 n不能越界
let newArray = array.prefix(upTo: 3)
// 取下标n之前的元素, 包含第n个元素 n不能越界
let newArray = array.prefix(through: 3)
// 正向遍历 不符合条件立即终止程序
let newArray = array.prefix { (item) -> Bool in
return item != 4
}
7. suffix: 取后n个元素,非逆序, 返回新数组
// 取后n个元素 返回新数组,n可以越界, 越界后返回完整数组
let newArray = array.suffix(3)
// 取下标为n的元素之后的所有元素, n不可以越界
let newArray = array.suffix(from: 3)
8. replace: 用新数组替换指定范围内的元素
if let range = Range(NSRange(location: 0, length: 3)) {
array.replaceSubrange(range, with: [20, 30, 40])
}
9. first: 查第一个元素
// 获取数组第一个元素, 返回可选值, 不存在第一个元素则返回nil
let element = array.first
// 获取符合条件后的第一个元素, 返回可选值, 不存在则返回nil
let element = array.first { (item) -> Bool in
return item > 4
}
// 获取符合条件后的第一个元素
// 另一种简洁写法
let element = array.first{ $0 > 4 }
10. last: 查最后一个元素
// 获取数组最后一个元素, 返回可选值, 不存在则返回nil
let element = array.last
11. 普通查找
// 查找下标为4的元素, 返回数组元素, 注意不能越界
let element = array[4]
12. 修改指定元素
// 将下标为4 的元素值修改为100, 注意不能越界
array[4] = 100