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

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

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

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

Q&A

解決済

2回答

165閲覧

C# / List<String[]>での要素の削除処理について

keruuuu

総合スコア13

C#

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

0グッド

0クリップ

投稿2018/02/22 09:26

前提・実現したいこと

C#の質問です。

List<String[]>での要素の削除についてお教え願います。
下記のような正方形ではないListにおいて2~6行目の3列目のみを削除して左詰めしたいのですが、どうしたらよろしいでしょうか?
よろしくお願いします。

<基データ>

列1列2列3列4列5列6列7列8列9列10
鈴木商事社員名簿営業部
田中一郎昭和51年1976年1月1日東京都港区JR
佐藤二郎昭和52年1977年2月2日東京都渋谷区自転車
藤原三郎昭和53年1978年3月3日東京都品川区京急
松本四郎昭和54年1979年4月4日東京都文京区メトロ
山田五郎昭和55年1980年5月5日東京都江東区バス

<変換後>

列1列2列3列4列5列6列7列8列9
鈴木商事社員名簿営業部
田中一郎1976年1月1日東京都港区JR
佐藤二郎1977年2月2日東京都渋谷区自転車
藤原三郎1978年3月3日東京都品川区京急
松本四郎1979年4月4日東京都文京区メトロ
山田五郎1980年5月5日東京都江東区バス

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

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

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

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

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

guest

回答2

0

ベストアンサー

こんにちは。
「どのようにしたらできるか」を自分で考えてみましたか?
どうしてできないと感じましたか?
できないと思った理由を整理してみてください。
そうするだけで、自分なりのやり方を思いつくことができるはずです。
やりたいことを分割して考えることはプログラミングにおいて重要なスキルです。


せっかくなので要求仕様を実現する例を一つおいておきます。

csharp

1var data; // 元データ 2 3var header = data.Take(1); // 元データの1行目だけ取り出したもの 4 5var records = data // 元データから 6 .Skip(1) // 一行目を読み飛ばして 7 .Select(record => record // 各レコードの 8 .Where((_, index) => index != 2) // indexが2の要素以外で 9 .ToArray()); // 配列にする 10 11var result = header.Concat(records).ToList(); // 1行目とくっつけてListにする

わかりやすさを最重要視したコードなので、実行効率は悪いです。

投稿2018/02/22 10:01

tamoto

総合スコア4103

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

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

keruuuu

2018/02/22 14:19

丁寧な回答ありがとうございます。 追加で1 点お尋ねしたいことがあります。 列削除をもう一列行いたい場合(3列目と10列目)に次のようするとどちらの列も削除されません。 .Where((_, index) => index != 2 || index != 9 ) 下記のようにすると要求はみたすのですが、基のデータの9列目を削除するよ!ということが不明確になることを嫌っています。 .Where((_, index) => index != 2) .Where((_, index) => index != 8) 良い方法があればご教授お願いいたします。
tamoto

2018/02/22 14:52

条件式を口に出して読んでみるといいです。 例えばindexが2のとき、「indexは2ではない、または、9ではない」はどうなると思いますか? 正しくはこうですね。 .Where((_, index) => index != 2 && index != 9 ) あと、ド・モルガンの法則でググってみるといいですよ。
keruuuu

2018/02/22 16:53

”または”なので単純にORかと思い”||”を使用していました。 よく考えるとindex != 2 || index != 9はFALSE|TRUEでTRUEになってしまいますね。 ド・モルガンの法則勉強しておきます。 今回はありがとうございました。 初めて本格的にプログラミングしていますので、今後もよろしくお願いします。
guest

0

こんな感じでしょうか?

var source = new[] { new[] { "a1", "b1", "c1", "d1" }, new[] { "a2", "b2", "c2", "d2" } }.ToList(); var sink = source.Select(s => s.Take(2).Concat(s.Skip(3)).ToArray()).ToList();

投稿2018/02/22 09:59

hihijiji

総合スコア4150

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

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

keruuuu

2018/02/22 16:56

ご回答ありがとうございました。 今回はtamato様の回答が実施したい内容に近かったためそちらを採用しました。 今後もよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問