我一直试图永远解析一个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]]
我收到错误消息,说该类型没有下标错误。我摆脱了下标引用,错误就消失了。为什么这里出现这个错误,我怎么能摆脱它呢?谢谢!
答案 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解析库来获取任何实际数据。