我有一个如下列表:
var products = new List<Product>
{
new Product { Id = 1, Category = "Electronics", Value = 15.0 },
new Product { Id = 2, Category = "Groceries", Value = 40.0 },
new Product { Id = 3, Category = "Garden", Value = 210.3 },
new Product { Id = 4, Category = "Pets", Value = 2.1 },
new Product { Id = 5, Category = "Electronics", Value = 19.95 },
new Product { Id = 6, Category = "Pets", Value = 5.50 },
new Product { Id = 7, Category = "Electronics", Value = 250.0 },
};
Run Code Online (Sandbox Code Playgroud)
我想按类别分组并获得属于该类别的"值" 的总和.示例:电子:284.95
虽然我可以用其他方式做到这一点,但我想学习Look-Up的用法.
是否有可能在查找中获得这两个值(类别和值)?如果是的话,我该怎么做?
The*_*uin 13
当您从查找中按键检索时,它的行为就像分组一样,因此您可以执行以下操作:
var productLookup = products.ToLookup(p => p.Category);
var electronicsTotalValue = productLookup["Electronics"].Sum(p => p.Value);
var petsTotalValue = productLookup["Pets"].Sum(p => p.Value);
//etc
var totalValue = products.Sum(p => p.Value);
// I wouldn't use the Lookup here, the line above makes more sense and would execute faster
var alsoTotalValue = productLookup.Sum(grp => grp.Sum(p => p.Value));
Run Code Online (Sandbox Code Playgroud)
你可能想要使用ToDictionary()
而不是ToLookup
var dict = products
.GroupBy(p => p.Category)
.ToDictionary(grp => grp.Key, grp => grp.Sum(p => p.Value));
foreach(var item in dict)
{
Console.WriteLine("{0} = {1}", item.Key, item.Value);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12887 次 |
最近记录: |