Lazily iterates over tuples of adjacent elements.
let numbers = (1...5)
let pairs = numbers.adjacentPairs()
// Array(pairs) == [(1, 2), (2, 3), (3, 4), (4, 5)]
The adjacentPairs()
method is declared as a Sequence
extension returning
AdjacentPairsSequence
and as a Collection
extension returning
AdjacentPairsCollection
.
extension Sequence {
public func adjacentPairs() -> AdjacentPairsSequence<Self>
}
extension Collection {
public func adjacentPairs() -> AdjacentPairsCollection<Self>
}
The AdjacentPairsSequence
type is a sequence, and the
AdjacentPairsCollection
type is a collection with conditional conformance to
BidirectionalCollection
and RandomAccessCollection
when the underlying
collection conforms.
Calling adjacentPairs
is an O(1) operation.
This method is named for clarity while remaining agnostic to any particular domain of programming. In natural language processing, this operation is akin to computing a list of bigrams; however, this algorithm is not specific to this use case.
This function is often written as a zip
of a sequence together with itself,
minus its first element.
Haskell: This operation is spelled s `zip` tail s
.
Python: Python users may write zip(s, s[1:])
for a list with at least one
element. For natural language processing, the nltk
package offers a bigrams
function akin to this method.
Note that in Swift, the spelling zip(s, s.dropFirst())
is undefined behavior
for a single-pass sequence s
.