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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

2回答

9750閲覧

C# / List<String[]>の各要素に対するTrim処理について

keruuuu

総合スコア13

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2018/02/26 15:31

###前提・実現したいこと
C#の質問です。

List<String[]>におけるTrim処理についてお教え願います。
(List<String[]>は固定長ファイルを読み込み、スペースを含んだ文字が格納されているものになります。)
固定長からスペースを削除するため、foreach文にて全ての要素に対しTrim処理をしようと試みましたが、エラーとなります。
行・列に対しfor文で回せば処理自体はできたのですが、後学のためforeach文での処理方法をご教授願います。

C#

1// foreach文:エラー 2foreach (var i in List) 3 { 4 List = List.Trim(); 5 } 6 7// for文:実行可 8for (int i = 0; i < List.Count; ++i) 9 { 10 for (int j = 0; j < List[i].Length; ++j) 11 { 12 List[i][j] = List[i][j].Trim(); 13 } 14 }

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

エラーになっていた原因は引数なしにListを指定していますので、リスト全体にTrimをかけようとしています。Trimは文字列のためのメソッドなので、文字列をひとつづつ指定する必要があります。(その点はふforで書けているので理解できていると思いますが。)

foreachはリスト内の要素ごとに取り出してくれます。
したがって、iはリストの中身です。

未検証ですが

C#

1var list2 = new List<string[]>(); 2foreach (var row in List) 3 var row2 = new List<string>(row.Length); 4 foreach(var item in row){ 5 row2.Add(item.Trim()); 6 } 7 list2.Add(row2.ToArray()); 8} 9List = list2;

カンマ区切りのデータをSplitしたと仮定して書きました。
foreachは要素の添え字は教えてくれないので、変換したリストを置き換えます。(最後の行)

Listから行(row)を取り出し、さらに要素(item)を取り出します。
一旦、変換後の行(row2)に格納後、配列に変換(ToArray())しています。

変換後が、List<List<string>>で問題なければこのようにもっとスッキリ書けます。

C#

1var list2 = new List<string[]>(); 2foreach (var row in List) 3 var row2 = new List<string>(row.Length); 4 list2.Add(row2); 5 6 foreach(var item in row){ 7 row2.Add(item.Trim()); 8 } 9}

もっと簡単に書く方法もありますが、この辺で。。。

投稿2018/02/26 17:18

編集2018/02/27 00:26
iwamoto_takaaki

総合スコア2883

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2018/02/26 22:40

trim でなく Trim() でお願いします。
keruuuu

2018/02/27 14:47

ご回答ありがとうございます。 foreach文ならより簡潔に書けるのかと思いましたが、for文と同様、Listから一つ一つ取り出した要素にTrim処理するしかないのですね。。。 今後もよろしくお願いします。
guest

0

簡潔に書く方法はあります。
しかし今の質問者さんでは見ても意味がわからないでしょう。

C#

1var list2 = List.Select(a => a.Select(b => b.Trim()).ToArray()).ToList();

意味が分からないものをコピペしても意味がありませんので多少冗長に見えてもループを使って自分で書ける範囲で書くのが良いと思います。
もう少し学習が進んで余裕ができたら、デリゲート、ラムダ式、拡張メソッド、LINQ の順に学んでください。
そうすれば意味がわかるようになります。
ここでは使いませんでしたが、LINQ を使うなら匿名クラスとタプルも学ばなくてはなりません。

投稿2018/02/27 15:14

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

keruuuu

2018/02/28 17:13

情報ありがとうございます。 まだ私では理解できないコードのようです。 ご指摘の通り、まずは自分で書ける範囲で一つ書ききってから、コードの簡略化をしていこうかと思います。 今後もよろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問