---
title: "compactMap(_:)"
framework: swift
role: symbol
role_heading: Instance Method
path: "swift/dictionary/compactmap(_:)"
---

# compactMap(_:)

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

## Declaration

```swift
func compactMap<ElementOfResult>(_ transform: (Self.Element) throws -> ElementOfResult?) rethrows -> [ElementOfResult]
```

## Parameters

- `transform`: A closure that accepts an element of this sequence as its argument and returns an optional value.

## Return Value

Return Value An array of the non-nil results of calling transform with each element of the sequence.

## Discussion

Discussion Use this method to receive an array of non-optional values when your transformation produces an optional value. In this example, note the difference in the result of using map and compactMap with a transformation that returns an optional Int value. let possibleNumbers = ["1", "2", "three", "///4///", "5"]

let mapped: [Int?] = possibleNumbers.map { str in Int(str) } // [1, 2, nil, nil, 5]

let compactMapped: [Int] = possibleNumbers.compactMap { str in Int(str) } // [1, 2, 5] note: O(n), where n is the length of this sequence.

## See Also

### Transforming a Dictionary

- [mapValues(_:)](swift/dictionary/mapvalues(_:).md)
- [reduce(_:_:)](swift/dictionary/reduce(_:_:).md)
- [reduce(into:_:)](swift/dictionary/reduce(into:_:).md)
- [compactMapValues(_:)](swift/dictionary/compactmapvalues(_:).md)
- [flatMap(_:)](swift/dictionary/flatmap(_:)-i3ly.md)
- [flatMap(_:)](swift/dictionary/flatmap(_:)-6chv9.md)
- [sorted(by:)](swift/dictionary/sorted(by:).md)
- [shuffled()](swift/dictionary/shuffled().md)
- [shuffled(using:)](swift/dictionary/shuffled(using:).md)
