对字典<字符串、字典<字符串、int>> 进行 linq 查询时出现问题
本文关键字:字符串 字典 问题 linq int 进行 查询 | 更新日期: 2023-09-27 18:35:05
考虑以下几点。
Dictionary<string, Dictionary<string, int>> myData;
我只想保留内部int > 1
的外部条目。
myData= myData.Select(c => c.Value.Where(i => i.Value > 1));
。引发转换错误。
谢谢。
编辑
@Saeed给出的答案是做得很好,但是我现在需要一些额外的东西。 我需要外部词典仅包含内部词典具有 1 个以上条目的条目。 (每次我认为我已经拥有它时,我都没有。 我相信我应该看到它!
没有int
大于 1 的外部字典,因为每个外部字典"包含"与其内部字典中一样多的整数。
如果要保留至少一个int
大于 1 的外部字典:
myData.Select(d => d.Value.Any(p => p.Value > 1));
如果要保留所有int
都大于 1 的外部字典:
myData.Select(d => d.Value.All(p => p.Value > 1));
你应该把它投射到字典中,你也可以简单地使用匿名类型而不是它的确切类型。
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);
如果您在浏览字典时遇到问题,也许要做的是摆脱它们!
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 };
现在有一个不错的平面集合,您应该可以轻松过滤到您想要的内容。