Skip to content

Instantly share code, notes, and snippets.

@tapi
Created December 5, 2017 20:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tapi/b6e876017374f2b498f6e1f52a3c0838 to your computer and use it in GitHub Desktop.
Save tapi/b6e876017374f2b498f6e1f52a3c0838 to your computer and use it in GitHub Desktop.
Swift 4 - Pairwise Sequence
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