将多维字符串数组转换为双精度数组

时间:2017-08-17 00:13:56

标签: ios arrays swift syntax-error

我一直试图永远解析一个CSV文件,我几乎就在那里。我已经使用这段代码将它变成了一个多维的字符串数组:

let path = Bundle.main.url(forResource: "BaseballSimStats", withExtension: "csv")
    var file = String()
    do {
        file = try String(contentsOf: path!)
        print(file)
    } catch {
        print(error)
    }
    let stringarray = file.components(separatedBy: "\n").map{ $0.components(separatedBy: ",") }

现在最后一步是把它变成一个Double。我正在使用此代码:

probs = Double[[stringarray]]

我收到错误消息,说该类型没有下标错误。我摆脱了下标引用,错误就消失了。为什么这里出现这个错误,我怎么能摆脱它呢?谢谢!

2 个答案:

答案 0 :(得分:0)

我使用.map()将String映射为Double,这应该适用于嵌套数组

var strArray = [["1.00000","1.10000"],["2.00000","2.10000"]]
var doubleArray = strArray.map { (arr: Array) -> Array<Any> in
    return arr.map({ (value: String) -> Double in
        return Double(value)!
    })
}
print(strArray)
print(doubleArray)

我不确定是否需要双地图。

我不是一个快速的大师,但这段代码可以帮助你实现你想要的......

答案 1 :(得分:0)

我不熟悉Double[[stringarray]]语法,所以我不知道它应该如何工作。我知道you can't just cast between array types

最简单的方法可能是用Double.init()包裹最里面的调用:

file.components(separatedBy: "\n").map{ $0.components(separatedBy: ",").map { Double($0)! }}

当然,对于CSV而言,除了分割逗号并假设所有内容都是有效数字之外,还有更多内容,因此我强烈建议您使用现有的CSV解析库来获取任何实际数据。