如何对一般列表进行排序

本文关键字:排序 列表 | 更新日期: 2023-09-27 17:47:46

我有一个通用列表。。。

公共列表<ApprovalEventDto>批准事件

ApprovalEventDto具有

public class ApprovalEventDto  
{
    public string Event { get; set; }
    public DateTime EventDate { get; set; }
}

如何按活动日期对列表进行排序?

如何对一般列表进行排序

您可以按如下方式使用List.Sort():

ApprovalEvents.Sort((lhs, rhs) => (lhs.EventDate.CompareTo(rhs.EventDate)));
using System.Linq;
void List<ApprovalEventDto> sort(List<ApprovalEventDto> list)
 { return list.OrderBy(x => x.EventDate).ToList();
 }
ApprovalEvents.Sort((x, y) => { return x.EventDate.CompareTo(y.EventDate); });

如果您不需要就地排序,并且您使用的是.NET 3.5,我会按照marxidad的建议使用OrderBy。如果您需要对现有列表进行排序,请使用list.Sort.

List.Sort可以接受一个Comparison委托或一个IComparer-两者都可以,这只是一个计算哪个更简单的例子。

在我的MiscUtil项目中,我有一个ProjectionComparer,它允许您指定排序键(就像对OrderBy所做的那样),而不必接受两个参数并自己调用CompareTo。我个人觉得这更容易阅读,但这当然取决于你。(在MiscUtil中也有一些简单的方法可以反转和组合比较。有关示例,请参阅单元测试。)

像Darksiders解决方案,但我更喜欢保持它的非神秘性:

ApprovalEvents.Sort((a, b) => (a.EventDate.CompareTo(b.EventDate)));

合并排序对列表非常有效。有关更多详细信息,请参阅WikiPedia条目,基本上它是一种递归n-Logn排序,不需要随机访问。

对于某些数据类型,您还可以使用鸽子洞来获取顺序n,而牺牲更多的内存使用。

您可以将List.Sort()方法与匿名方法或lambda表达式一起使用。更多信息,请访问MSDN