C#Help:在C#中对对象列表进行排序
可能重复:
使用预定义的排序值列表对对象排序
C#Help:在C#中对对象列表进行排序双重post
在C#中对对象列表进行排序
public class CarSpecs { public CarSpecs() { } private String _CarName; public String CarName { get { return _CarName; } set { _CarName = value; } } private String _CarMaker; public String CarMaker { get { return _CarMaker;} set { _CarMaker = value; } } private DateTime _CreationDate; public DateTime CreationDate { get { return _CreationDate; } set { _CreationDate = value; } } }
这是一个列表,我试图找出一种有效的方法来排序List CarList
,包含6个(或任何整数)汽车,按汽车生产日期。 我打算做冒泡排序,但那会有用吗? 任何帮助?
谢谢
CarList = CarList.OrderBy( x => x.CreationDate ).ToList();
首先,使用.Net 3.5中引入的简写语法,可以使这个类定义更短:
public class CarSpecs { public CarSpecs() { } public String CarName { get; set; public String CarMaker { get; set; } public DateTime CreationDate { get; set; } }
这将编译成与上面完全相同的类。
其次,您可以使用Lambda表达式或LINQ轻松地对它们进行排序:
var linq = (from CarSpecs c in CarList orderby c.CreationDate ascending select c) as List; var lambda = CarList.OrderBy(c => c.CreationDate).ToList();
不要编写自己的排序算法。 .NET有一个Array.Sort()
方法专门用于这样的事情。
由于您有自定义对象,因此需要定义如何比较2个对象,以便排序算法知道如何对它们进行排序。 你可以这两种方式之一:
- 使您的
CarSpecs
类实现IComparable
接口 - 创建一个实现
IComparer
的类,并将其作为参数传递给Array.Sort()
以及您的数组。
BCL中已存在排序算法 – Array.Sort()和List.Sort()。 实现一个IComparer类,使用CreationDate确定排序顺序,然后将所有对象放入数组或列表中,并调用相应的Sort()方法