3

我有一个 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))};

我使用上面的代码,它确实有效,但我想知道是否有更有效的方法来执行此操作,因为当数字包含数千个值时,此操作可能会执行缓慢。

我几乎要求重构代码以提高效率。

4

1 回答 1

3

您可以使用 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 );
}
于 2010-08-25T23:23:50.857 回答