请考虑以下事项。 。
Dictionary<string, Dictionary<string, int>> myData;
我想只保留内部 int > 1
的外部条目。
myData= myData.Select(c => c.Value.Where(i => i.Value > 1));
。 。 。抛出转换错误。
感谢。
修改
@Saeed给出的答案很棒,但是我现在还需要额外的东西。我需要外部Dictionary只包含内部Dictionary有多个条目的条目。 (每次我想我已经得到它,我没有。而且我确定我应该看到的东西!)
答案 0 :(得分:5)
int
大于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));
答案 1 :(得分: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);
答案 2 :(得分: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 };
现在有一个很好的扁平集合,您应该可以轻松地过滤到您想要的内容。