首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C#中对包含日期的字符串列表进行排序

在C#中对包含日期的字符串列表进行排序
EN

Stack Overflow用户
提问于 2013-02-03 07:39:08
回答 6查看 40.4K关注 0票数 16

我有一个

带日期的。

我的清单是:

代码语言:javascript
复制
{"01/01/2013","10/01/2013","20/01/2013"}

我想对列表进行排序,如下所示:

代码语言:javascript
复制
{"20/01/2013","10/01/2013","01/01/2013"}

我该怎么做呢?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-02-03 07:43:46

使用linq:

代码语言:javascript
复制
var list = new List {"01/01/2013", "10/01/2013", "20/01/2013"};
var orderedList = list.OrderByDescending(x => DateTime.Parse(x)).ToList();

更新(根据评论中的问题):

您可以这样处理无效日期(无效日期被视为

):

代码语言:javascript
复制
var list = new List { "01/01/2013", "10/01/2013", "N/A" , "20/01/2013"  };
var orderedList2 = list.OrderByDescending(x =>
            {
                DateTime dt;
                DateTime.TryParse(x, out dt);
                return dt;
            });

或者,如果您希望将无效的日期时间作为列表中的第一项:

代码语言:javascript
复制
var orderedList3 = list.OrderByDescending(x =>
            {
                DateTime dt;
                if (!DateTime.TryParse(x, out dt)) return DateTime.MaxValue;
                return dt;
            });

您还可以过滤掉无效的日期:

代码语言:javascript
复制
var filteredList = list.Where(x =>
            {
                DateTime dt;
                return DateTime.TryParse(x, out dt);
            }).Select(DateTime.Parse).OrderByDescending(x => x);

或者更好:

代码语言:javascript
复制
var filteredList = list.Select(x =>
        {
            DateTime dt;
            return new {valid = DateTime.TryParse(x, out dt), date = dt};
        }).Where(x => x.valid).Select(x => x.date).OrderByDescending(x => x);
票数 42
EN

Stack Overflow用户

发布于 2013-02-03 07:43:25

您不应该使用数据的字符串表示形式-我们都生活在面向对象的世界中:)

最好的方法是将这些字符串转换为实际的DateTime对象,并通过linq以相反的顺序对它们进行排序:

代码语言:javascript
复制
var dates = Array.ConvertAll(dateStrings, x => DateTime.Parse(x));
return dates.OrderByDesc(x => x);

另一种方法是实现自定义排序函数,请参阅

此链接

..。然后,您只需在排序函数中使用它:

代码语言:javascript
复制
DateAsStringComparer myComparer = new DateAsStringComparer();
dateStrings.Sort(myComparer);
票数 4
EN

Stack Overflow用户

发布于 2013-02-03 07:48:02

试试这个:

代码语言:javascript
复制
List s = new List() { "01/01/2013", "10/01/2013", "20/01/2013" };
var d = s.OrderByDescending(i => DateTime.ParseExact(i, "dd/MM/yyyy", null));
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14667754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档