正确的方法来排序多对象列表?

时间:2011-02-14 04:38:51

标签: c# .net list sorting

我有一个列表类,它有一个Title(string)Rank(int)和一些其他字符串元素。我希望能够对列表进行排序,以便我可以按排名对整个排序进行排序。

例如:

 Title              Rank              Bla1        Bla2
 ---------------------------------------------------------
 Whatever            0                Bla         Blabety Bla
 Something Else      4                Bla2        Double Bla
 Howdy               1                Bla3        asdf
 Last                2                Bla4        fdsa

变为:

 Title              Rank              Bla1        Bla2
 ----------------------------------------------------------
 Something Else      4                Bla2        Double Bla  
 Last                2                Bla4        fdsa      
 Howdy               1                Bla3        asdf
 Whatever            0                Bla         Blabety Bla

这是班级宣言:

public class Results
{
    public string title { get; set; }
    public int rank { get; set; }
    public string term { get; set; }
    public string studentComment { get; set; }
}

列表声明:

public List<Results> studentList = new List<Results>();

如何点studentList并按排名对其进行排序以获得上面显示的结果?

提前致谢!

6 个答案:

答案 0 :(得分:3)

我会像这样使用LINQ方法OrderBy或OrderByDescending:

var orderedList = studentList.OrderByDescending(item=>item.rank);

修改

如果你想要一个返回类型的List,只需使用.ToList()方法:

var orderedList = studentList.OrderByDescending(item=>item.rank).ToList();

答案 1 :(得分:3)

您可以使用List<T>.Sort()方法:

studentList.Sort( (a,b) => b.Rank.CompareTo(a.Rank) );

在此处将 b与进行比较而不是 a到b 会给出降序(例如,等级4到0级)。

答案 2 :(得分:2)

public List<Results> studentList = new List<Results>();
...
studentList.Sort((student1, student2) => student1.Rank.CompareTo(student2.Rank));

这会对学生进行就地排序。使用传递给Sort方法的匿名函数(表示为lambda表达式)比较学生。

答案 3 :(得分:1)

Lambda表达救援!

studentList.OrderByDescending(p => p.rank).ToList();

答案 4 :(得分:0)

让Results类实现IComparable,然后实现方法:

public int CompareTo(Results other)
{
    return (other.rank - rank);
}

调用studentList.Sort()现在可以正确排序列表

答案 5 :(得分:0)

您可以让Results班级实施IComparer interface并使用SortedList代替列表。