0

タイプの辞書メンバーがありDictionary<string, Dictionary<string, List<SomeType>>>ます。私が欲しいのは、これからネストされた辞書を取得することですDictionary<string, List<SomeType>>。を使用してこれを取得すると思いましmyDict.Valuesたが、実際にValueCollectionは、ネストされた辞書自体ではなく、戻ってきます。

現在、ValueCollection.ToDictionary関数を使用してこれを実行しようとしていますが、すでに同様のことを実行している場合は共有してください。

更新 ネストされた辞書を返したい

Dictionary<string, List<SomeType>> GetKeyPairValues()
{
  // get nested dictionary from this.myDict
}
4

4 に答える 4

2

私が欲しいのはネストされた辞書を取得することです

return myDict.Values.ToDictionary(x => x.Keys, x => x.Values);

あなたのコメントに基づいて、そしてこれのためにLINQ式がどれほど複雑でなければならないかを見て、なぜ基本的なforループに行ってみませんか?

Dictionary<string, List<SomeType>> GetKeyPairValues()
{
    foreach (var pair in dict)
    { 
        yield return pair.Value;
    }
}

また、LINQを使用するよりも効率的かもしれません。

于 2012-09-25T07:38:23.470 に答える
2

GroupByを使用してグループ化しKey、すべてのリストを同じキーでマージする必要があります。

 Dictionary<string, List<SomeType>> GetKeyPairValues()
 {
      return dic.Values.SelectMany(d => d)
                       .GroupBy(p => p.Key)
                       .ToDictionary(g => g.Key, 
                                     g => g.SelectMany(pair => pair.Value)
                                           .ToList());
 }
于 2012-09-25T07:49:30.493 に答える
1

これを試して:

var dictionary = new Dictionary<string, Dictionary<string, List<int>>>();//initialize your source dictionary
var mergedDictionary = dictionary.SelectMany(d => d.Value).ToDictionary(k=>k.Key, k=>k.Value);

更新: ToDictionary を使用

于 2012-09-25T07:40:50.730 に答える
0

Actually Dictionary<> implements multiple Values properties. If you use it through IDictionary<> you get a ICollection<TValue>

IDictionary<string, Dictionary<string, List<SomeType>>> dict = new Dictionary<string, Dictionary<string, List<SomeType>>>();
ICollection<Dictionary<string, List<SomeType>>> = dict.Values;
于 2012-09-25T07:40:29.650 に答える