C# List<>.sort 排序【转载】
转载:http://hi.baidu.com/lifangfang1218/blog/item/aa49002362f76bf9d6cae244.html
第三种方法需要编写一个对象排序比较的方法,对List中的元素对象没有特殊的要求,但在比较方法中需要实现对象比较规则,这个方法实现后,就可以把这方 名字作为参数委托给List的Sort方法,Sort方法在排序时会执行这个方法对List中的对象进行比较,详细可参照下面的代码。对List中元素我 们还使用上面的SortTestObj2类对象。
- staticvoid Main(string[] args)
- {
- //利用代理方法进行排序
- DelegateSort();
- }
- //Sort(Comparison<(Of <(T>)>))方法排序,这中方法需要先编写一个对象比较的方法,然后
- //把这个比较方法委托给List的Sort方法。
- //对象比较的方法
- privatestaticint SortTestObj2Compare(SortTestObj2 obj1, SortTestObj2 obj2)
- {
- int res = 0;
- if ((obj1 == null) && (obj2 == null))
- {
- return 0;
- }
- elseif ((obj1 != null) && (obj2 == null))
- {
- return 1;
- }
- elseif ((obj1 == null) && (obj2 != null))
- {
- return -1;
- }
- if (obj1.Code > obj2.Code)
- {
- res = 1;
- }
- elseif (obj1.Code < obj2.Code)
- {
- res = -1;
- }
- //如果是时间类型的比较,我现在写的是倒序,如果想正序把1改为-1,-1改为1
- if (DateTime.Parse(obj1.MailDate).CompareTo(DateTime.Parse(obj2.MailDate))>0)
{
res = -1;
}
else if (DateTime.Parse(obj1.MailDate).CompareTo(DateTime.Parse(obj2.MailDate)) < 0)
{
res = 1;
} - //如果是string类型的比较,我现在写的是倒序,如果想正序把1改为-1,-1改为1
- //if (obj1.MailDate.CompareTo(obj2.MailDate) > 0)
// {
// res = -1;
// }
//else if (obj1.MailDate.CompareTo(obj2.MailDate) < 0)
// {
// res = 1;
// } - return res;
- }
- //List的委托排序
- privatestaticvoid DelegateSort()
- {
- List<SortTestObj2> objLst = new List<SortTestObj2>();
- SortTestObj2 obj1 = new SortTestObj2();
- obj1.Code = 3;
- obj1.Name = "TestObj1";
- objLst.Add(obj1);
- SortTestObj2 obj2 = new SortTestObj2();
- obj2.Code = 2;
- obj2.Name = "TestObj2";
- objLst.Add(obj2);
- SortTestObj2 obj3 = new SortTestObj2();
- obj3.Code = 4;
- obj3.Name = "TestObj4";
- objLst.Add(obj3);
- SortTestObj2 obj4 = new SortTestObj2();
- obj4.Code = 1;
- obj4.Name = "TestObj3";
- objLst.Add(obj4);
- SortTestObj2 obj5 = new SortTestObj2();
- obj5.Code = 6;
- obj5.Name = "TestObj6";
- objLst.Add(obj5);
- objLst.Sort(SortTestObj2Compare);
- Console.WriteLine("委托方法排序的结果");
- foreach (SortTestObj2 item in objLst)
- {
- Console.WriteLine("Code=" + item.Code + ",Name=" + item.Name);
- }
- }