2

次のことを考慮してください。。。

Dictionary<string, Dictionary<string, int>> myData;

内側 のエントリのみを保持したいと思いますint > 1

myData= myData.Select(c => c.Value.Where(i => i.Value > 1));

。。。変換エラーをスローします。

ありがとう。

編集

@Saeedの答えは素晴らしいものですが、今は何か追加が必要です。外側の辞書には、内側の辞書に複数のエントリがあるエントリのみを含める必要があります。(私がそれを持っていると思うたびに、私は持っていません。そして、私はそれが私が見るべきものであると確信しています!)

4

3 に答える 3

5

各外部ディクショナリには、内部ディクショナリにあるの intと同じ数の整数が「含まれている」ため、が1より大きい外部ディクショナリはありません。

少なくとも1つintが1より大きい外部辞書を保持したい場合。

myData.Select(d => d.Value.Any(p => p.Value > 1));

すべてintのsが1より大きい外部辞書を保持する場合。

myData.Select(d => d.Value.All(p => p.Value > 1));
于 2012-05-22T21:48:38.377 に答える
3

辞書にキャストする必要があります。また、正確な型の代わりに匿名型を使用することもできます。

myData= myData
             .Select(c => new {Key = c.Key,
                           Value = c.Value
                           .Where(i => i.Value > 1)
                           .ToDictionary(y=>y.Key, y=>y.Value)})
             .ToDictionary(x=>x.Key, x=>x.Value);

更新:これを行った後、追加の要件については次のことを行います。

myData = myData.Where(x=>x.Value.Count() > 1).ToDictionary(x=>x.Key,x=>x.Value);
于 2012-05-22T21:50:11.327 に答える
0

辞書の操作に問題がある場合は、辞書を削除することをお勧めします。

var flattened = 
  from kvp1 in myData
  let s1 = kvp1.Key
  from kvp2 in kvp1.Value
  let s2 = kvp2.Key
  let i = kvp2.Value
  select new { s1, s2, i };

これで、必要なものに簡単にフィルターできる、すてきなフラット コレクションができました。

于 2012-05-23T13:59:08.523 に答える