美文网首页
迟到的Swift入门 - 数组操作

迟到的Swift入门 - 数组操作

作者: 刘_小_二 | 来源:发表于2020-09-11 10:09 被阅读0次

    Swift数组操作

    1. 数组的日常操作

    1.0 声明数组

    初始化空数组
    var array_1 = []
    var array_2 = Array<Int>()
    var array_3 = [Int]()
    
    初始化默认值的数组
    var array_4 = [1, 2, 3, 4]
    var array_5 = Array<Int>(repeating: 0, count: 5)
    var array_6 = [Int](repeating: 0, count: 5)
    

    2. 数组基本操作

    添加元素
    // 添到末尾
    arr.append(1)
    // 数组相加
    arr.append(contentsOf: arr0)
    arr = arr + arr0
    arr += arr0
    
    插入元素
    // 在索引1(第二个位置)的位置处插入6
    arr.insert(6, at: 1)
    
    删除元素
    // 删除第一个
    arr.removeFirst()
    // 删除最后一个
    arr.removeLast()
    arr.popLast()
    // 删除特定位置
    arr.remove(at: 1)
    // 删除区间的元素
    arr.removeSubrange(Range.init(NSMakeRange(0, 1))!)
    // 删除所有元素
    arr.removeAll()
    
    修改元素
    // 修改指定位置的元素
    arr[0] = 6
    // 修改数组区间的元素
    arr[0...2] = [0, 1, 2]
    
    数组基本方法
    // 判空
    arr.isEmpty()
    // 数组长度
    arr.count
    // 获取元素
    // 根据索引i
    arr[i]
    // 获取第一个元素
    arr[0]
    arr.first
    // 获取最后一个元素
    arr[arr.count - 1]
    arr.last
    // 数组最小值
    arr.min()
    // 数组最大值
    arr.max()
    // 数组区间
    arr[0...1]
    // 判断是否包含指定元素
    arr.contains(5)
    // 返回指定元素的索引
    arr.index(of: 5)
    
    遍历数组
    // 遍历索引
    for index in 0 ..< arr.count {
    }
    // through: 包含最后一个元素
    // to: 不包含最后一个元素
    for i in stride(from: 0, to: 4, by: 1) {
    }
    // 遍历元素
    for ele in arr {
    }
    // 同时遍历索引和元素
    for (index, element) in arr.enumerated() {
    }
    // forEach遍历
    arr.forEach { (ele) in
        print(ele)
    }
    
    索引
    // startIndex: 数组第一个元素的索引
    // endIndex: 数组最后一个元素的索引的下一位
    arr[arr.startIndex()]
    // print 0
    arr[arr.startIndex ..< arr.endIndex]
    // print 1, 2, 3, 4, 5
    // 注意endIndex不是数组最后一个元素的索引。
    

    2. 数组特殊方法

    filter-直接过滤数组元素,返回满足条件的新数组
    // $0表示arr中的元素
    // 返回大于2的元素所组成的数组
    let result = arr.filter { $0 > 2 }
    // 传入闭包
    let result = arr.filter { (ele) -> Bool in
        return ele > 2
    }
    
    map-将原来数组的元素 映射到 新的数组中,转化元素类型。
    // 传入闭包
    let result = arr.map { (num) -> String in
        return "\(num)Z"
    }
    // 每个元素 *2
    let result = arr.map { $0 * 2 }
    // 0~4的数组,每个元素 *2
    let result = (0...4).map { $0 * 2 }
    
    flatMap

    flatMap是在map的基础上增加新的功能
    空值过滤:调用flatMap生成的新数组,过滤了nil值的元素。

    let result = arr.flatMap { $0 }
    // swift 4.1之后,更名为compactMap。即为
    let result = arr.compactMap { $0 }
    

    强解包:flatMap自动做了解包工作,不用再去解包元素。

    // 以map方法进行对比
    let arr: [String?] = ["123","456","789"]
    let result = arr.map { $0 }
    // print:[Optional("123"), Optional("456"), Optional("789")]
    
    let arr: [String?] = ["123","456","789"]
    let result = arr.compactMap { $0 }
    // print:["123", "456", "789"]
    

    数组压平,解嵌套数组(把二维数组变成一维数组)

    let arr = [[1],[2],[3],[4]]
    let result = arr.flatMap { $0 }
    // print:[1, 2, 3, 4]
    
    reduce

    可以把数组变成一个元素。先指定一个初始值,然后在闭包中写一个规则。reduce就会递归调用数组的元素进行闭包运算。直到最后算出一个结果。

    // 第一个参数是用来运算的初始值
    // 依次用第二个参数的运算符号与数组元素进行算术运算
    // 数组所有元素之和
    (1...4).reduce(0, +)
    // print:10
    // 数组所有元素之差
    (1...4).reduce(0, -)
    // print:-10
    // 数组所有元素之积
    (1...4).reduce(1, *)
    // print:24
    // 数组所有元素之商
    (1...4).reduce(24, /)
    // print:1
    
    // 数组所以元素异或:相同为0,不同为1
    [1,1,1,1].reduce(0, ^)
    // print:0
    [1,1,1,0].reduce(0, ^)
    // print:1
    
    将数组元素连成字符串,并添加指定内容。闭包和简写形式:
    // 闭包形式
    let arr = [1,1,1,0]
    let result = arr.reduce("hello") { (a1, a2) -> String in
        return "\(a1)" + "\(a2)"
    }
    // print: hello1110
    // 简写形式
    let result = arr.reduce("hello") { "\($0)" + "\($1)" }
    // print: hello1110
    
    prefix,suffix
    var arr = [1,2,3,4,5]
    // prefix: 从头开始获取
    // upto: [0, 3) 不包含第三个元素的索引:0,1,2
    let result = arr.prefix(upTo: 3)
    // 结果:[1,2,3]
    
    // suffix: 截取至尾部
    // 从第三个元素到末尾
    let result = arr.suffix(from: 3)
    // 结果:[4,5]
    
    
    
    dropFirst(),dropLast()

    与prefix和suffix互补的方法,获得删除从头部或尾部开始的区间后的数组

    var arr = [1,2,3,4,5]
    // 从头部开始删除三个元素
    let result = arr.dropFirst(3)
    // 结果:[4, 5]
    
    // 从尾部开始删除三个元素
    let result = arr.dropLast(3)
    // 结果:[1,2]
    

    参考来源:https://www.jianshu.com/p/ab2e11054454

    相关文章

      网友评论

          本文标题:迟到的Swift入门 - 数组操作

          本文链接:https://www.haomeiwen.com/subject/jwevektx.html