美文网首页
Array Iterating Over

Array Iterating Over

作者: llllllllIllllIl | 来源:发表于2019-11-07 17:29 被阅读0次
    //: [Previous](@previous)
    
    import Foundation
    var players = ["Alice", "Bob", "Cindy", "Dan"]
    
    // ----------------------
    // | Iterating By forin |
    // ----------------------
    //都是基于Sequence实现的
    //⓵ 当您需要对数组的所有元素执行操作时,请使用for-in循环遍历数组的内容。
    players.insert("Donna", at: 4)//forin本质是enumerated()
    for player in players {
        print(player)
    }
    
    // ------------------------
    // | Iterating By indices |indices获取数组索引区间(使用没enumerated方便,不推荐)
    // ------------------------
    for i in players.indices {//0..<players.count/endIndex
        print("Iterating By " + players[i])
    }
    
    
    // ------------------------
    // | Iterating By Methods |EnumeratedSequence(得到索引和具体值)
    // ------------------------
    
    //如果同时需要每个数据项的值和索引值(迭代过程中可以用where分句进行筛选),可以使用 enumerated() 方法来进行数组遍历【Set使用zip进行遍历】。如果对单个元素或者某段元素进行索引或者求值,可以使用上面2⃣️④ 的方法。
    for (index, player) in players.enumerated() where index%2 == 0 {
        print("~~\(index + 1). \(player)")
    }
    
    // ------------------------
    // | Iterating By Methods |Sequence
    // ------------------------
    //playIterator迭代器
    var playIterator = players.makeIterator()
    while let play = playIterator.next() {
        print(play)
    }
    
    
    
    // ------------------------
    // | Iterating By Methods |Collection
    // ------------------------
    //⓶ ⭐️函数遍历 通过Collection(Sequence)、RangeReplaceableCollection协议的遍历和下标包装方法进行nomutating切片查找(返回Subsequence类型)。
    
    // 遍历对数组进行类型转换(碾平)修改或者单纯遍历(不作运算或其他操作)、运算修改。除了filter是RangeReplaceableCollection(筛选遍历用filter)。
    let fibs = [0, 1, 1, 2, 3, 5]
    fibs.forEach { fib in//这个方法只作为一系列遍历函数的链式操作时插入forEach进行调式打印或作为一个简洁的链式操作时非常好(和操作数组有关时但不修改数组,只是用到数组元素)【函数式编程】。
        if fib == 0 {
            return//return只能跳出一次循环,该方法没有返回值(只能return)
        }
        print(fib)//无法使用break,continue,否则用forin循环
    }
    
    var squares = fibs.map { fib in fib * fib }
    var filters = fibs.filter { (fib) -> Bool in
        fib >= 2//RangeReplaceableCollection
    }
    
    let possibleNumbers = ["1", "2", "three", "///4///", "5"]
    //Collection flatMap已经遗弃了,compactMap是内部碾平操作
    let mapped: [Int?] = possibleNumbers.map { str in Int(str) }
    // [1, 2, nil, nil, 5]
    let flatMapped: [Int] = possibleNumbers.compactMap { str in Int(str) }
    // [1, 2, 5]
    
    
    //这几个不算遍历但是写出来。集合获取(内部通过下标方法)数组切片(Subsequence)的方法,本质通过下标运算得到切片。没有mutating。即SubSequence != Self(nomutating)
    var alternate = fibs.dropLast()
    fibs.prefix(2)
    fibs.suffix(2)
    
    
    // ----------------------------
    // | Iterating by lazy Method |LazySequence
    // ----------------------------
    let data = 1...3
    let result = data.lazy.map { (i: Int) -> Int in
        print("正在处理");//data.map 可以对比观察。lazy属性必须时可变的,API内部就是var的。处理的数据不要求可变不可变。
        return i * 2
    }
    
    
    //: [Next](@next)
    

    相关文章

      网友评论

          本文标题:Array Iterating Over

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