数组转换问题

时间:2018-03-10 20:35:29

标签: arrays swift

我想像这样转换多维数组:

var array = [
               ["10011"],
               ["11011"]
            ]

进入结果(使用Swift),如下所示:

var result = [
               [1,0,0,1,1],
               [1,1,0,1,1]
             ]

这是我迄今为止所尝试过的:

var array = [
                ["10011"],
                ["10011"]
            ]

for var i in 0..<array.count {
    array[i][0] = (array[i][0]).characters.map { (c) -> Int in
        return c as! Int
    }
}
print(array)

但我收到此错误消息:

  

无法指定类型&#39; [Int]&#39;的值输入&#39; String&#39;

map行。

如何摆脱这个错误?

1 个答案:

答案 0 :(得分:1)

这样可行:

var array = [
    ["10011"],
    ["11011"]
]

let output = array.map {
    //$0[0] fetches a string from the inner array. 
    //flatMap unwraps the optionals and discards any nil results
    $0[0].flatMap { 
             //This converts each character into an Optional(Int)
             Int(String($0)) 
        }
}

请注意,如果字符串中的任何字符都不是有效数字,那么它们将从输出数组中删除,并且该子数组将更短。

如果这不符合您的要求,请将Int(String($0))更改为Int(String($0)) ?? 0

另请注意,您可以将整个事情放在一行:

let output = array.map { $0[0].flatMap { Int(String($0)) }

但这有点难以阅读。