2

考虑以下 。. .

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

我想只保留内部 int > 1的外部条目。

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

. . . 引发转换错误。

谢谢。

编辑

@Saeed 给出的答案做得很好,但是我现在需要一些额外的东西。我需要外部字典只包含内部字典超过 1 个条目的条目。(每次我认为我得到了它,我没有。而且我确信这是我应该看到的东西!)

4

3 回答 3

5

没有大于 1的外部字典,因为每个外部字典“包含”与其内部字典中一样多的整数。 int

如果要保留至少一个int大于 1 的外部字典:

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

如果要保留所有ints 都大于 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 回答