Generic Instance Method

flatMap(_:)

Returns an array containing the concatenated results of calling the given transformation with each element of this sequence.

Declaration

func flatMap<SegmentOfResult>(_ transform: ((key: Key, value: Value)) throws -> SegmentOfResult) rethrows -> [SegmentOfResult.Element] where SegmentOfResult : Sequence

Parameters

transform

A closure that accepts an element of this sequence as its argument and returns a sequence or collection.

Return Value

The resulting flattened array.

Discussion

Use this method to receive a single-level collection when your transformation produces a sequence or collection for each element.

In this example, note the difference in the result of using map and flatMap with a transformation that returns an array.

let numbers = [1, 2, 3, 4]

let mapped = numbers.map { Array(repeating: $0, count: $0) }
// [[1], [2, 2], [3, 3, 3], [4, 4, 4, 4]]

let flatMapped = numbers.flatMap { Array(repeating: $0, count: $0) }
// [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]

In fact, s.flatMap(transform) is equivalent to Array(s.map(transform).joined()).

Complexity: O(m + n), where n is the length of this sequence and m is the length of the result.

See Also

Transforming a Dictionary

func mapValues<T>((Value) -> T) -> Dictionary<Key, T>

Returns a new dictionary containing the keys of this dictionary with the values transformed by the given closure.

func reduce<Result>(Result, (Result, (key: Key, value: Value)) -> Result) -> Result

Returns the result of combining the elements of the sequence using the given closure.

func reduce<Result>(into: Result, (inout Result, (key: Key, value: Value)) -> ()) -> Result

Returns the result of combining the elements of the sequence using the given closure.

func map<T>(((key: Key, value: Value)) -> T) -> [T]

Returns an array containing the results of mapping the given closure over the sequence’s elements.

func compactMap<ElementOfResult>(((key: Key, value: Value)) -> ElementOfResult?) -> [ElementOfResult]

Returns an array containing the non-nil results of calling the given transformation with each element of this sequence.

func compactMapValues<T>((Value) -> T?) -> Dictionary<Key, T>

Returns a new dictionary containing only the key-value pairs that have non-nil values as the result of transformation by the given closure.

func sorted(by: ((key: Key, value: Value), (key: Key, value: Value)) -> Bool) -> [(key: Key, value: Value)]

Returns the elements of the sequence, sorted using the given predicate as the comparison between elements.

func shuffled() -> [(key: Key, value: Value)]

Returns the elements of the sequence, shuffled.

func shuffled<T>(using: inout T) -> [(key: Key, value: Value)]

Returns the elements of the sequence, shuffled using the given generator as a source for randomness.