Created
December 5, 2017 20:22
-
-
Save tapi/b6e876017374f2b498f6e1f52a3c0838 to your computer and use it in GitHub Desktop.
Swift 4 - Pairwise Sequence
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public struct PairwiseIterator<T>: IteratorProtocol { | |
private var iterator: AnyIterator<T> | |
private var lastElement: T? | |
public init(_ iterator: AnyIterator<T>) { | |
self.iterator = iterator | |
self.lastElement = self.iterator.next() | |
} | |
public mutating func next() -> (first: T, second: T)? { | |
guard let element = lastElement, let currentElement = iterator.next() else { | |
return nil | |
} | |
lastElement = currentElement | |
return (first: element, second: currentElement) | |
} | |
} | |
public extension Sequence { | |
public var pairwise: AnySequence<(first: Self.Element, second: Self.Element)> { | |
let seq = AnySequence { PairwiseIterator(AnyIterator(self.makeIterator())) } | |
return seq | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment