Skip to content

Instantly share code, notes, and snippets.

@juri
Created April 6, 2018 05:31
Show Gist options
  • Save juri/3c4c4cf66364f2936186d73bb7d2182c to your computer and use it in GitHub Desktop.
Save juri/3c4c4cf66364f2936186d73bb7d2182c to your computer and use it in GitHub Desktop.
Pairwise sequence method for Swift
extension Sequence {
/// `[e1, e2, …, eN]` → `[(nil, e1), (e1, e2), …, (eN-1, eN), (eN, nil)]`
func pairwise() -> UnfoldSequence<(Self.Element?, Self.Element?), ((Self.Element?, Self.Element?)?, Bool)> {
var iter = self.makeIterator()
var next1: Element? = nil
var next2 = iter.next()
return Swift.sequence(first: (next1, next2)) { prevpair -> (Element?, Element?)? in
guard let nv2 = next2 else { return nil }
next1 = nv2
next2 = iter.next()
return (next1, next2)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment