実現したいこと
読み込んだcsvファイルを二次元配列に格納後
filter()で値を絞りたい
発生している問題・エラーメッセージ
直書きしたコードでfilter()は取得できるのですが、
csvArray = dataArray.filter{$0[3] == "38"}
csv読み込み後に詰め込んだ二次元配列で同じことをやろうとすると下記のエラーが起きます。
Fatal error: Index out of range
該当のソースコード
swift
1import UIKit 2 3class ViewController: UIViewController { 4 5 var csvArray: Array<Array<String>> = [] 6 var dataArray: Array<Array<String>> = [ 7 ["1","東京","男性","38","2"] 8 ,["2","神奈川","男性","31","2"] 9 ,["3","岐阜","女性","23","2"] 10 ,["4","東京","男性","20","2"] 11 12 ] 13 14 override func viewDidLoad() { 15 super.viewDidLoad() 16 17 csvArray = dataArray.filter{$0[3] == "38"} 18 print(csvArray) //[["1", "東京", "男性", "38", "2"]] 19 20 if let csvPath = Bundle.main.path(forResource: "test", ofType: "csv") { 21 do { 22 var csvString = try NSString(contentsOfFile: csvPath, encoding: String.Encoding.utf8.rawValue) as String 23 24 csvString = csvString.replacingOccurrences(of: "\r", with: "") 25 let rowArray = csvString.components(separatedBy: "\n") 26 27 rowArray.forEach { 28 let items = $0.components(separatedBy: ",") 29 csvArray.append(items) 30 } 31 print(csvArray[3][3]) //男 32 csvArray = csvArray.filter{$0[3] == "女"} ←ここでエラー 33 print(csvArray) 34 35 } catch { 36 37 } 38 } 39 40 } 41} 42
test.csv
1東京,23,サッカー,男 2愛知,33,ピアノ,女 3三重,38,サッカー,男 4東京,44,読書,女 5神奈川,50,柔道,男 6
試したこと
csv読み込み後のfilter()
csvArray = csvArray.filter{$0[0] == "東京"}
は成功するのですが、0列目以外を検索しようとすると・・・
csvArray = csvArray.filter{$0[3] == "女"}
こちらのコードではエラーになります。
0列目以外を検索したい場合どのように書けば良いでしょうか?
こちらについてお分かりになられる方いらっしゃましたらご教授願います。
よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー