c#按照它的元素属性对列表进行排序

时间:2014-09-17 13:58:09

标签: c# linq sorting

我有一份清单private List<Team> allTeams = new List<Team>() ;

 我列表中的每个小组都有一个字段private double fitness ;

有人可以向我解释一下OrderBy<>Sort的工作原理以及如何使用它们有效地按每个allTeams排序我的列表fitness吗?

4 个答案:

答案 0 :(得分:3)

fitness publicinternal属性设为Fitness

然后使用:

var ordered = allTeams.OrderBy(x => x.Fitness).ToList();

答案 1 :(得分:1)

如果确实不希望公开fitness,您可以:

  1. 在您的Team类{/ 1}}中实现 内的自定义IComparer<Team>public使用其对私有fitness字段的访问权限进行比较两个团队的fitness
  2. comparer overload of Enumerable.OrderBy中使用此比较器,例如
  3. var sortedTeams = allTeams.OrderBy(t => t, new Team.FitnessComparer());
    

    comparer overload of List.Sort就地排序,例如

    allTeams.Sort(new Team.FitnessComparer());
    

答案 2 :(得分:0)

您需要为您的班级实施IComparable<T>。然后使用

allTeams.OrderBy(x => x).ToList();

或者

allTeams.Sort(); 

答案 3 :(得分:0)

如果您的健身属性是公共财产,您可以这样做:

var ordered = allTeams.OrderBy(t => t.Fitness);

但是,对于私有字段,您无法执行此操作。