2011-08-07 51 views
1

我有List<Foo>。 Foo类包含一个Type属性。 Type属性是一个枚举。将列表中的元素分类到另一个分类

public enum Type 
    { 
     Arithmetic, Fraction, ... 
    } 


    public class Foo 
    { 
     public Type ProblemType 
     { 
      get; set; 
     } 
    } 

我想产生它是由ProblemType排序的另一份名单,而且每一个包含属于同一类型的Foo clases。我可以想象我应该使用Enumerable,但我不知道如何使用它们。

在此先感谢

+1

所以你想要一个列表列表,其中每个内部列表包含'Foo'具有相同的'ProblemType'? – svick

回答

2

您可以使用GroupBy()做到这一点:

List<List<Foo>> groupedLists 
    = yourList.GroupBy(foo => foo.ProblemType) 
       .OrderBy(group => group.Key) 
       .Select(group => group.ToList()) 
       .ToList(); 

顺带一提,我建议不要使用Type作为枚举的名称,进入名称冲突与System.Type通常不是一个好主意。您甚至可以将其命名为ProblemType,因为编写public ProblemType ProblemType { get; set; }是明确的。

+1

如果您先订购然后选择,则可以使用分组的“Key”属性。我认为它比使用First()更清晰。 – svick

+0

@svick,你是对的。回答相应更新,谢谢:) –

+0

谢谢Fréderic。这是我正在寻找的 –

1

要按ProblemType,你可以试试这个

var sortedFooList = fooList.OrderBy(f => f.ProblemType); 

sortedFooListIOrderedEnumerable<Foo>。如果您想要List<Foo>,只需在致电OrderBy()后添加.ToList()即可。

0

假设你已经有一个List<Foo>,就可以查询该列表由ProblemType提供的有序集合:

List<Foo> myFoos = GetFooList(); 

var sortedFoos = myFoos.OrderBy(f => f.ProblemType); 

sortedFoos是枚举集由Foo.ProblemType排序。

相关问题