我有一个列表类,它有一个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
并按排名对其进行排序以获得上面显示的结果?
提前致谢!
答案 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代替列表。