2017-08-17 148 views
0

我一直試圖解析一個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: ",") } 

現在最後一步就是把它變成一個雙。我正在使用此代碼:

probs = Double[[stringarray]] 

我收到一個錯誤,指出該類型沒有下標錯誤。我擺脫了下標引用,錯誤消失了。爲什麼這個錯誤在這裏,我怎麼能擺脫它?謝謝!

+0

你能解釋一下你的數組包含了什麼?你期望你的probs變量是什麼? –

+0

該數組包含30行6個數字,如下所示:15.14376997。探測器應該是一樣的事情,與前面的數組,但類型雙 –

回答

0

我用.map()映射字符串轉換爲雙,這應該爲嵌套數組

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) 

工作,我不知道是否需要雙地圖。

我不是一個迅速大師但是這個代碼應該幫助你實現你想要的..

+0

沒有必要強制拆包,如果你使用flatMap – JAL

+0

我在操場上運行它,它的工作。然後我把它放在我的代碼中,它告訴我陣列與Double不兼容。 –

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解析庫來處理任何實際的數據。

+0

我嘗試過使用csv解析器通過可可豆莢,但無法獲得它的工作。當我運行這個代碼時,我得到一個錯誤,說它發現零。 –

+0

我設置了'let file =「1,2,3 \ n4,5,6」'並運行這個,它對我來說工作得很好。如果你的值不能被解析爲雙精度,你需要定義你想要它做什麼,並實現它。該語言不允許將它們放在'[[Double]]中'。 – Sam

+0

有道理。我上面的數字是雙重權利? –