質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

解決済

Swift filter()での検索

ataru2222
ataru2222

総合スコア230

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

1回答

0評価

0クリップ

124閲覧

投稿2022/06/17 13:13

実現したいこと

読み込んだcsvファイルを二次元配列に格納後
filter()で値を絞りたい

発生している問題・エラーメッセージ

直書きしたコードでfilter()は取得できるのですが、

csvArray = dataArray.filter{$0[3] == "38"}

csv読み込み後に詰め込んだ二次元配列で同じことをやろうとすると下記のエラーが起きます。

Fatal error: Index out of range

該当のソースコード

swift

import UIKit class ViewController: UIViewController { var csvArray: Array<Array<String>> = [] var dataArray: Array<Array<String>> = [ ["1","東京","男性","38","2"] ,["2","神奈川","男性","31","2"] ,["3","岐阜","女性","23","2"] ,["4","東京","男性","20","2"] ] override func viewDidLoad() { super.viewDidLoad() csvArray = dataArray.filter{$0[3] == "38"} print(csvArray)  //[["1", "東京", "男性", "38", "2"]] if let csvPath = Bundle.main.path(forResource: "test", ofType: "csv") { do { var csvString = try NSString(contentsOfFile: csvPath, encoding: String.Encoding.utf8.rawValue) as String csvString = csvString.replacingOccurrences(of: "\r", with: "") let rowArray = csvString.components(separatedBy: "\n") rowArray.forEach { let items = $0.components(separatedBy: ",") csvArray.append(items) } print(csvArray[3][3]) //男 csvArray = csvArray.filter{$0[3] == "女"} ←ここでエラー print(csvArray) } catch { } } } }

test.csv

東京,23,サッカー,男 愛知,33,ピアノ,女 三重,38,サッカー,男 東京,44,読書,女 神奈川,50,柔道,男

試したこと

csv読み込み後のfilter()
csvArray = csvArray.filter{$0[0] == "東京"}

は成功するのですが、0列目以外を検索しようとすると・・・
csvArray = csvArray.filter{$0[3] == "女"}
こちらのコードではエラーになります。

0列目以外を検索したい場合どのように書けば良いでしょうか?

こちらについてお分かりになられる方いらっしゃましたらご教授願います。
よろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

hoshi-takanori

2022/06/17 18:23

たぶん print(csvArray) すると最後に [""] があるのでは。test.csv の最後で改行するとそうなります。(改行するのは間違いではないので、rowArray から空の要素を取り除けば良いかと。)
ataru2222

2022/06/19 00:39

hoshi様!!!!! rowArray格納後に rowArray.poplast()を挟むことで最後の要素を消して実行することができました。 本当にいつもありがとうございます(涙)
ataru2222

2022/06/19 00:51

rowArray.removeLast()でいけました。 ありがとうございました。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています