Как сгладить необязательный массив разнородных значений - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть гетерогенный массив, который выглядит так:

let array: [Any] = [
    [1, 2, nil],
    3
]

Я бы хотел сделать это массивом [1, 2, 3]. Как я могу это сделать? Могу ли я использовать compactMap { $0 } как-нибудь?

1 Ответ

0 голосов
/ 04 сентября 2018
extension Collection {
    func flatMapped<T>(with type: T.Type? = nil) -> [T] {
        return flatMap { ($0 as? [Any])?.flatMapped() ?? ($0 as? T).map { [$0] } ?? [] }
    }
}

let array: [Any] = [[1, 2, nil],3]
// Use the syntax of your choice
let flattened1: [Int] = array.flatMapped()         //  [1, 2, 3]
let flattened2 = array.flatMapped(with: Int.self)  //  [1, 2, 3] 
let flattened3 = array.flatMapped() as [Int]       //  [1, 2, 3]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...