将列表中的元素分类到另一个分类

时间:2011-08-07 14:39:05

标签: c# oop

我有List<Foo>。 Foo类包含Type属性。 Type属性是枚举。

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


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

我想生成另一个列表,其中它按ProblemType排序,每个列表包含属于同一Type的Foo clases。我可以想象我应该使用Enumerable,但我不知道如何使用它们。

提前致谢

3 个答案:

答案 0 :(得分: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 :(得分:1)

要按ProblemType排序,您可以试试这个

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

sortedFooList将为IOrderedEnumerable<Foo>。如果您需要List<Foo>,请在致电.ToList()后添加OrderBy()

答案 2 :(得分:0)

假设您已经有List<Foo>,您可以通过ProblemType查询该列表以提供有序集合:

List<Foo> myFoos = GetFooList();

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

sortedFoos是一个按Foo.ProblemType排序的枚举集合。