Swift 3 for loop with increment

后端 未结 5 1794
逝去的感伤
逝去的感伤 2020-11-27 04:23

How do I write the following in Swift3?

for (f = first; f <= last; f += interval)          
{
    n += 1
}

This is my own attempt

<
5条回答
  •  长情又很酷
    2020-11-27 04:56

    With Swift 5, you may choose one of the 5 following examples in order to solve your problem.


    #1. Using stride(from:to:by:) function

    let first = 0
    let last = 10
    let interval = 2
    
    let sequence = stride(from: first, to: last, by: interval)
    
    for element in sequence {
        print(element)
    }
    
    /*
    prints:
    0
    2
    4
    6
    8
    */
    

    #2. Using sequence(first:next:) function

    let first = 0
    let last = 10
    let interval = 2
    
    let unfoldSequence = sequence(first: first, next: {
        $0 + interval < last ? $0 + interval : nil
    })
    
    for element in unfoldSequence {
        print(element)
    }
    
    /*
    prints:
    0
    2
    4
    6
    8
    */
    

    #3. Using AnySequence init(_:) initializer

    let anySequence = AnySequence({ () -> AnyIterator in
        let first = 0
        let last = 10
        let interval = 2
    
        var value = first
        return AnyIterator {
            defer { value += interval }
            return value < last ? value : nil
        }
    })
    
    for element in anySequence {
        print(element)
    }
    
    /*
    prints:
    0
    2
    4
    6
    8
    */
    

    #4. Using CountableRange filter(_:) method

    let first = 0
    let last = 10
    let interval = 2
    
    let range = first ..< last
    let lazyCollection = range.lazy.filter({ $0 % interval == 0 })
    
    for element in lazyCollection {
        print(element)
    }
    
    /*
    prints:
    0
    2
    4
    6
    8
    */
    

    #5. Using CountableRange flatMap(_:) method

    let first = 0
    let last = 10
    let interval = 2
    
    let range = first ..< last
    let lazyCollection = range.lazy.compactMap({ $0 % interval == 0 ? $0 : nil })
    
    for element in lazyCollection {
        print(element)
    }
    
    /*
    prints:
    0
    2
    4
    6
    8
    */
    

提交回复
热议问题