Flatten [Any] Array Swift

前端 未结 3 796
暖寄归人
暖寄归人 2020-11-27 08:05

Using this Stack Overflow question I have the following code.

let numbers = [1,[2,3]] as [Any]
var flattened = numbers.flatMap { $0 }
print(flattened) // [1,         


        
3条回答
  •  粉色の甜心
    2020-11-27 08:51

    Here's an alternate implementation of @rmaddy's anyFlatten:

    It can be most concisely written like so, but it's quite cryptic:

    extension Array {
        func anyFlatten() -> [Any] {
            return self.flatMap{ ($0 as? [Any]).map{ $0.anyFlatten() } ?? [$0] }
        }
    }
    

    Here's a more reasonable implementation:

    extension Array {
        func anyFlatten() -> [Any] {
            return self.flatMap{ element -> [Any] in
                if let elementAsArray = element as? [Any] { return elementAsArray.anyFlatten() }
                else { return [element] }
            }
        }
    }
    

提交回复
热议问题