拆分字符串和排序 - Linq

时间:2016-12-19 01:11:34

标签: linq split

我有一个“网站”列表,其中一个项目为“年份”。它被定义为一个字符串,格式为“MM / yyyy”。 “年”的数据是

01/2012
04/2012
01/2013
06/2012

我知道我可以使用DateTime.Parse转换字符串并对其进行排序。但我想拆分字符串并使用linq进行排序。是否有可能拆分MM和yyyy,对其进行排序?

2 个答案:

答案 0 :(得分:1)

当然,这很容易做到。但是,这是低效的,因为您必须对每次比较进行拆分:

.OrderBy(yearMonthStr => {
    var tokens = yearMonthStr.Split('/');
    return int.Parse(tokens[0]) + 100*int.Parse(tokens[1])
})

答案 1 :(得分:1)

好吧,正如另一个答案所示,你可以做到。我的回答是使用匿名结构,因此排序应该更有效。

method1Result显示我会做什么(假设数据始终有效)。主要优点是你有DateTime个对象,因此以后会更容易使用。

method2Result请勿在问题中使用DateTime.Parse。但是,它导致代码更长,结果的可用性更低(如果需要返回它,则必须用您定义的代码替换匿名结构。

var data = new string[]
{
    "01/2012",
    "04/2012",
    "01/2013",
    "06/2012",
};

var method1Result = data
    .Select(x => DateTime.Parse(x)).OrderBy(x => x);

var method2Result = data
    .Select(x => 
        { 
            var t = x.Split('/'); 
            return new { 
                year = int.Parse(t[1]), 
                month = int.Parse(t[0]) }; 
            })
    .OrderBy(x => x.year)
    .ThenBy(x => x.month);