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

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

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

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

Q&A

2回答

697閲覧

DictionaryをListに変換したい

ppsspp

総合スコア6

C#

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

0グッド

0クリップ

投稿2018/08/06 05:23

実現したいこと

DictionaryをListに変換したいのですが
一つ目のKeyより後ろが変換できません。

該当のソースコード

C#

1 Dictionary<string, Dictionary<string, Dictionary<string, int>>> dic = 2 new Dictionary<string, Dictionary<string, Dictionary<string, int>>>(); 3 4 5//中身省略 6 7 8//キーをListに変換する 9List<int> keysList = dic.Keys.ToList(); 10 11//値をListに変換する 12List<string> valsList = dic.Values.ToList();

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

Windows, VisualStudio2017.15.7.5

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

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

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

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

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

Zuishin

2018/08/06 05:26

こんな複雑な Dictionary からこんな単純な List に変換するのであれば、データの加工が必要になると思います。具体的な入力データを作り、理想の出力例を挙げてください。
guest

回答2

0

一般にSelctManyをすることで平坦化することができます。
var ans = dic.SelectMany(o1 => o1.Value).SelectMany(o2 => o2.Value).Select(o3 => o3.Value);

実際のところ、別質問を考えると、表をつくるためのListが得たいのかなーと思っていますが、そうするためには↑は全く的外れです(これでは、全て商品の数量・金額・利益がlistに入るので)
この複雑な構造の全体ではなく、最も内側のDictionary<string, int>intだけからなるリストを複数セットList<List<int>>得るとか、縦列を得たいなら、そもそも商品Aの数量のintだけを得るようにLinqで絞り込む作業が必要になってきます。

従いまして、現状では作るものの要件が明らかでなく、その原因は自分で作っているデータ構造と得たいデータの対応付けが理解できていないのだと思います。

また、そもそもの話として、別質問側の回答にあるように、csvを表的に出すのが目的であれば、DictionaryをListにするというのは無駄に思います。(プログラム全般といのではなく)C#を学んでいくというのであれば、表を出すのに自分でデータをいじるより、ライブラリをうまく使うほうが筋に思います。
また、学習目的としても、データ構造が良いとは思えず(三重のDictionaryというのはちょっと考えものです)、データ構造から見直したほうが良いように思います。

投稿2018/08/06 15:00

papinianus

総合スコア12705

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

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

0

dic.Keys ではstring がとれるけど、
dic.Values では Dictionary<string, Dictionary<string, int>>
がとれます。

で、あなたのやりたいことはなんでしょうか。

投稿2018/08/06 05:53

y_waiwai

総合スコア87719

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問