繁体   English   中英

如何对通用列表进行排序?

[英]How do I sort a generic list?

我有一个通用列表......

public List <ApprovalEventDto> ApprovalEvents

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可以使用比较委托或IComparer - 要么可以工作,只需要解决一个更简单的问题。

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

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

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

合并排序可以很好地用于列表。 有关更多详细信息,请参阅WikiPedia条目 ,基本上它是一种递归的n-Log n排序,不需要随机访问。

对于某些数据类型,您还可以使用pigeon holing来获取订单n,但代价是更多的内存使用量。

您可以将List.Sort()方法与匿名方法或lambda表达式一起使用。 更多在MSDN

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM