我有一个IEnumerable项目,我想按相关类别进行分组。这些项目按与它们相关联的类别(即一个列表)进行分组,因此单个项目可能会成为多个类别的一部分。
var categories = numbers.SelectMany(x => x.Categories).Distinct();
var query =
from cat in categories
select new {Key = cat,
Values = numbers.Where(n => n.Categories.Contains(cat))};
我使用了上面的代码,并且实际上确实起作用,但是我想知道是否有更有效的方法来执行此操作,因为当数字包含成千上万的值时,此操作的执行速度可能会很慢。
我几乎是在要求重构代码以提高效率。
最佳答案
您可以使用LINQ的内置分组功能,该功能应该比包含查找的速度更快。但是,与任何与性能相关的问题一样,在决定如何重写已知有效的代码之前,您应该真正编写代码以收集性能指标。事实证明,您将要使用的卷完全没有性能问题。
所以,这是代码。这未经测试,但类似的东西应该可以工作:
var result = from n in numbers
from c in n.Categories
select new {Key = c, n.Value}
into x group x by x.Key into g
select g;
每个组包含一个键和属于该键的一系列值:
foreach( var group in result )
{
Console.WriteLine( group.Key );
foreach( var value in group )
Console.WriteLine( value );
}
关于c# - LINQ组项目。单个项目可能在几个组中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3570901/