我一直在阅读有关 LINQ to Objects 的文章,现在我的同事希望我向他们展示它。
现在,我对运算符和语法选择有了一定的了解,但我听说您可以使用 LINQ 避免繁重的嵌套循环。不过,我很难想出一组很好的“之前和之后”代码 list 来证明这一点。
我在 Magennis 的书中找到了使用和不使用 LINQ 进行排序和分组的一个很好的例子,他还有一个编写 xml 的例子。但是那些嵌套循环呢?考虑到我们通常需要一个或两个 foreach
循环来遍历查询结果,这甚至是一个现实的说法吗?
如果有人能向我解释这个想法(最好有具体的例子),我将不胜感激。
最佳答案
假设您有很多产品,例如:
var products = new List<Product>
{
new Product { Id = 1, Category = "Electronics", Value = 15.0 },
// etc.
};
如果您想查找值(value) > 100.0 美元的所有产品,并按类别分组,您可以使用 foreach
执行此操作:
var results = new Dictionary<string, List<Product>>();
foreach (var p in products)
{
if (p.value > 100.0)
{
List<Product> productsByGroup;
if (!results.TryGetValue(p.Category, out productsByGroup))
{
productsByGroup = new List<Product>();
results.Add(p.Category, productsByGroup);
}
productsByGroup.Add(p);
}
}
或者,您可以简单地使用 LINQ 方法:
var results = products.Where(prod => prod.Value > 100.0)
.GroupBy(prod => prod.Category);
或者使用 LINQ 表达式语法:
var results = from p in products
where p.Value > 100.0
group p by p.Category;
更加简洁且不易出错。
关于c# - 如何使用 LINQ 来避免嵌套循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8301904/