如何按dateTime元素对自定义数组列表进行排序

时间:2010-12-01 15:36:19

标签: c# datetime sorting arraylist

我有一个带有类实例的ArrayList(在这种情况下是'loan')。此贷款类包含变量“日期”。我想以最佳方式按这些日期变量对ArrayList进行排序。

我之前完成日期排序的方法是使用List<DateTime>。但在这种情况下,我想对列表/ arraylist进行排序,保留其余信息,以便所有信息都可以在别处使用

4 个答案:

答案 0 :(得分:3)

您可以使用System.Linq.Enumerable扩展程序Cast<T>OrderBy进行此操作:

ArrayList list;

List<Loan> loanes = (
    from loan in list.Cast<Loan>()
    orderby loan.Date
    select loan).ToList();

答案 1 :(得分:2)

您需要制作一个返回IComparer<Loan>的{​​{1}}。

答案 2 :(得分:1)

Slaks说什么基本上要在ArrayList中排序你需要一个自定义IComparer实现,我在下面放了一个示例:

public class Loan
{
    public DateTime date { get; set; }

}

public class LoanComparer : IComparer
{
    public int Compare(object x, object y)
    {
        Loan loanX = x as Loan;
        Loan loanY = y as Loan;

        return loanX.date.CompareTo(loanY.date);
    }
}


static void Main(string[] args)
{
    Loan l1 = new Loan() {date = DateTime.Now};
    Loan l2 = new Loan() { date = DateTime.Now.AddDays(-5) };

    ArrayList loans = new ArrayList();
    loans.Add(l1);
    loans.Add(l2);


    loans.Sort(new LoanComparer());
}

答案 3 :(得分:-1)

你根本不应该使用ArrayList。您应该使用强类型通用List<DateTime>

对于自定义排序,Sort方法的重载需要比较器。通过反转常规比较,您可以按降序排序:

list.Sort(delegate(DateTime x, DateTime y){ return y.CompareTo(x); });

更新

使用C#3中的lambda表达式,委托更容易创建:

list.Sort((x, y) => y.CompareTo(x));