Generic Instance Method

compactMapValues(_:)

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

Declaration

func compactMapValues<T>(_ transform: (Value) throws -> T?) rethrows -> Dictionary<Key, T>

Parameters

transform

A closure that transforms a value. transform accepts each value of the dictionary as its parameter and returns an optional transformed value of the same or of a different type.

Return Value

A dictionary containing the keys and non-nil transformed values of this dictionary.

Discussion

Use this method to receive a dictionary with non-optional values when your transformation produces optional values.

In this example, note the difference in the result of using mapValues and compactMapValues with a transformation that returns an optional Int value.

let data = ["a": "1", "b": "three", "c": "///4///"]

let m: [String: Int?] = data.mapValues { str in Int(str) }
// ["a": 1, "b": nil, "c": nil]

let c: [String: Int] = data.compactMapValues { str in Int(str) }
// ["a": 1]

Complexity: O(m + n), where n is the length of the original dictionary and m is the length of the resulting dictionary.

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 flatMap<SegmentOfResult>(((key: Key, value: Value)) -> SegmentOfResult) -> [SegmentOfResult.Element]

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

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.