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

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

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

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

Q&A

解決済

3回答

3525閲覧

C#のListの操作について

kurosuke___

総合スコア217

C#

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

0グッド

1クリップ

投稿2016/07/19 08:58

こんにちは。

まず目的なのですが、元になるCSVデータを2次元配列にして、二次元配列を1行づつ読み込み、C列にあたる要素によってそれ以外の列の中身を振り分けたいと思っています。

{"名前", "住所", "市町村区名"}
という配列が1万行以上あり、市町村区名が港区だとしたら、港区という要素がC列に有る行の住所・名前を各文字列にしてどんどん追加していきたいです。説明が難しいです。

C#

1{ 2{"田中", "AA県AA市AA街00", "A市"}, 3{"鈴木", "BB県BB市BB街00", "B市"}, 4{"麻生", "CC県CC市CC街00", "C市"}, 5{"大島", "AA県AA市AA街01", "A市"} 6}

という風になっているものから、

C#

1{ 2{"田中、大島", "AA県AA市AA街00、AA県AA市AA街01", "A市"}, 3{"鈴木", "BB県BB市BB街00", "B市"}, 4{"麻生", "CC県CC市CC街00", "C市"} 5}

という2次元配列を作りたいです。

わたしが思いついたのは

C#

1List<string[]> list = new List<string[]>(); 2foreach (string[] x in csvList) 3{ 4 string[] tempList = { "", "", x[2] }; 5 list.Add(tempList); 6}

(csvListはcsvファイルを2次元配列にしたものです)
この用に追加していき、後からListの重複を削除して、またcsvListを一行ずつ読み込んで、
Listの中の3列目が、csvListの3列目と一致する箇所の0番目と一番目に文字列を追加していけばいいかなというかんじです。

ですが、調べてみても見かけ上2次元配列になっている?Listの行列を指定してアクセスする方法が見つかりません。
そもそも後から指定した行列にアクセスして参照したり書き換えたりといったことはできないのでしょうか?

わかりづらい説明で申し訳ないのですが、このようなListの操作について教えていただきたく思います。
また、なにか他にもっといい方法等有りましたら教えていただきたいです。
よろしくお願いします。

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

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

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

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

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

guest

回答3

0

String[][] csvList;

という変数に元のデータが入っているものとして、

String[][] result = csvList .GroupBy(row => row[2]) .Select(group => new String[]{ String.Join("、", group.Select(member=>member[0]).ToArray()), String.Join("、", group.Select(member=>member[1]).ToArray()), group.Key }) .ToArray();

こんな感じでresultに目的の配列が入ります。

投稿2016/07/19 09:09

編集2016/07/19 11:34
yuba

総合スコア5568

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

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

kurosuke___

2016/07/20 05:32

具体的なコードありがとうございます。 ですが、LINQについて知識がおいついていないので、もう少し調べてみます。
guest

0

投稿2016/07/19 09:12

Zuishin

総合スコア28660

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

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

kurosuke___

2016/07/20 05:31

LINQというやつですね、調べてみたのですが私にはよくわかりませんでした・・・ もうちょいしらべてみます
guest

0

ベストアンサー

調べてみても見かけ上2次元配列になっている?Listの行列を指定してアクセスする方法が見つかりません。

C#

1 list[0]で、string[]ですので、 2 string[] value = list[0] 3 value[2]

list[0][2]

とすることで、「市区町村」部分にはアクセスできますよ。

今コード書く時間がないので、ヒントだけ、
LINQを使わないでList<>をつかうのであれば、
listに同じ「市区町村」があるかを探す。
あれば、氏名、住所を追記する。
なければ、listに追加する。
という流れになります。

「市区町村」をキーにして、Dictionaryを作成するのもいいかもしれません。

投稿2016/07/20 07:22

KIYOSHI

総合スコア268

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

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

kurosuke___

2016/07/21 07:07

こんなに簡単にアクセスできるんですね。勉強になりました。 ヒントありがとうございます。かなり参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問