Back to Swift Algorithms

Intersperse

Guides/Intersperse.md

1.2.11.8 KB
Original Source

Intersperse

[Source | Tests]

Place a given value in between each element of the sequence.

swift
let numbers = [1, 2, 3].interspersed(with: 0)
// Array(numbers) == [1, 0, 2, 0, 3]

let letters = "ABCDE".interspersed(with: "-")
// String(letters) == "A-B-C-D-E"

let empty = [].interspersed(with: 0)
// Array(empty) == []

interspersed(with:) takes a separator value and inserts it in between every element in the sequence.

Detailed Design

A new method is added to sequence:

swift
extension Sequence {
    func interspersed(with separator: Element) -> InterspersedSequence<Self>
}

The new InterspersedSequence type represents the sequence when the separator is inserted between each element. InterspersedSequence conforms to Collection, BidirectionalCollection, RandomAccessCollection and LazySequenceProtocol when the base sequence conforms to those respective protocols.

Complexity

Calling these methods is O(1).

Naming

This method’s and type’s name match the term of art used in other languages and libraries.

Comparison with other languages

Haskell: Has an intersperse function which takes an element and a list and 'intersperses' that element between the elements of the list.

Rust: Has a function called intersperse to insert a particular value between each element.

<!-- Link references for other languages -->