我有一个Dictionary<string, CachedImage>
我想要对项目进行分组,计算组中的项目数,如果计数大于6500,则遍历每个组。
CachedImage
类包含我感兴趣的Path
和ExpiresUtc
属性。
我的Linq-fu遗憾地缺乏复杂的查询,所以这就是我所拥有的,我想我已经搞砸了。我假设我想要的是可能的。
任何帮助都会受到赞赏,特别是快速演练。
Regex searchTerm = new Regex(@"(jpeg|png|bmp|gif)");
var groups= PersistantDictionary.Instance.ToList()
.GroupBy(x => searchTerm.Match(x.Value.Path))
.Select(y => new
{
Path = y.Key,
Expires = y.Select(z => z.Value.ExpiresUtc),
Count = y.Sum(z => z.Key.Count())
})
.AsEnumerable();
答案 0 :(得分:2)
试试这个:
var groups = PersistantDictionary.Instance.ToList()
.GroupBy(x => searchTerm.Match(x.Value.Path).Value)
.Where(g => g.Count() > 6500);
foreach (var group in groups)
{
Console.WriteLine("{0} images for extension {1}", group.Count(), group.Key);
foreach (KeyValuePair<string, CachedImage> pair in group)
{
//Do stuff with each CachedImage.
}
}
所以要打破这个:
PersistantDictionary.Instance.ToList()
生成KeyValuePair<string, CachedImage>
。
.GroupBy(x => searchTerm.Match(x.Value.Path).Value)
按正则表达式匹配对Path
的{{1}}对列表进行分组。请注意,我使用了CachedImage
属性 - Value
方法返回Match
对象,因此最好按匹配的实际文本进行分组。此步骤的结果将是Match
的{{1}}。
IEnumerable
这确保只有那些具有&gt;的组。将检索6500个项目。