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

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

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

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

Q&A

解決済

4回答

10993閲覧

C#の入れ子になっているListに要素を追加する方法

kurosuke___

総合スコア217

C#

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

0グッド

1クリップ

投稿2016/07/20 06:22

編集2016/07/21 07:14

こんにちは。
先日、Listに関する質問をしましたが、もう一つわからないことがあったので質問を分けることにしました。

C#

1{ 2 {"a"}, 3 {"b"}, 4 {"c"}, 5 {"d"} 6}

このようになっているListの操作で、"c"という文字列をListのなかのListの0番目から検索して、見つかった場所に追加するようにする処理は、どういったことをすればいいんでしょうか?

"c"を検索して"C01"という文字列を以下のように追加したいとしたら、どうすればいいんでしょうか?

C#

1{ 2 {"a"}, 3 {"b"}, 4 {"c","C01"}, 5 {"d"} 6}

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

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

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

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

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

coco_bauer

2016/07/20 06:38

List型は要素を順番に保持するコレクションクラスですから、1次元の構造です。質問の例は、リストのリストという入れ子構造であって、2次元ではありません。 この事を踏まえて、質問を修正してください。
kurosuke___

2016/07/21 07:14

なるほど、入れ子になっていたんですね。知りませんでした。ありがとうございます。
guest

回答4

0

List<String> と宣言している場合、
その要素に、配列のように値追加はできません。文字列として区切り文字”,”などを含めて追加してはどうでしょう。

C#のListの操作について
この質問の事やりたいのであれば、
ListではなくDictionary<string,List<string>>を住所用・名前用を用意し追加されてはどうでしょう。

投稿2016/07/21 08:14

KIYOSHI

総合スコア268

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

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

kurosuke___

2016/07/22 02:37

ディクショナリで作って、あとで纏めるような処理を書けばできそうですね。 それにしてもやり方は色いろあるんですね。勉強になりました。 ありがとうございました。
guest

0

C#

1var list = new List<List<string>>() 2{ 3 new List<string>() { "a" }, 4 new List<string>() { "b" }, 5 new List<string>() { "c" }, 6 new List<string>() { "d" } 7}; 8 9var result = list.Select(item => 10{ 11 if (item.Contains("c")) 12 { 13 var new_list = new List<string>(item); 14 new_list.Add("C01"); 15 return new_list; 16 } 17 return item; 18})

投稿2016/07/20 14:11

編集2016/07/21 12:15
hidetzu

総合スコア19

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

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

kurosuke___

2016/07/21 07:10

これは・・・要素を入れるコードですか? 例では、"c"を検索して、見つかった場所に"C01"を追加したいのです。
hidetzu

2016/07/21 12:18

そういうことでしたか。"c"を見つけたら要素を追加するようなコードに修正しました。
kurosuke___

2016/07/22 02:35

ありがとうございます。やはりLINQをつかったほうがいいようですね・・・
guest

0

ベストアンサー

C#

1var list = new List<List<string>>() 2{ 3 new List<string>() {"a"}, 4 new List<string>() {"b"}, 5 new List<string>() {"c"}, 6 new List<string>() {"d"} 7} 8foreach (var l in list) 9{ 10 if (l.Contains("c")) 11 { 12 l.Add("C01"); 13 } 14}

で、一応挙げられた要件は満たします。
if 文と Add 文を適宜書き換えれば対応できるのではないでしょうか?

投稿2016/07/20 06:55

Zuishin

総合スコア28660

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

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

kurosuke___

2016/07/21 07:12

foreachって参照を渡してるだけなんですね。とても衝撃を受けました。まだまだ基礎が足りませんね私は。 ありがとうございました。
guest

0

元の「二次元のリスト」が何の型なのかわからないので、
とりあえずIEnumerable<IEnumerable<string>>として、

IEnumerable<IEnumerable<string>> xss = new List<List<string>> { new List<string>{"a"}, new List<string>{"b"}, new List<string>{"c"}, new List<string>{"d"}, }; var yss = xss.Select(xs => { if (xs.FirstOrDefault() == "c") return xs.Concat(new string[]{"C01"}); return xs; }); foreach(var xs in xss){ System.Console.WriteLine(string.Join(",",xs)); } System.Console.WriteLine(); foreach(var ys in yss){ System.Console.WriteLine(string.Join(",",ys)); }

投稿2016/07/20 06:48

ozwk

総合スコア13521

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

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

kurosuke___

2016/07/21 07:12

IEnumerableとはインターフェースというやつでしょうか。 そこら辺の知識がないので、勉強しなおしてきますね。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問