Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
拆分字符串并排序-Linq_Linq_Split - Fatal编程技术网

拆分字符串并排序-Linq

拆分字符串并排序-Linq,linq,split,Linq,Split,我有一个“站点”列表,其中一个项目是“年”。它定义为字符串,格式为“MM/yyyy”。 “年”的数据为 我知道我可以使用DateTime.Parse转换字符串并对其排序。但是我想拆分字符串并使用linq进行排序。是否有可能拆分MM和yyyy,对其进行排序?当然,这很容易做到。但是,这是低效的,因为您必须对每个比较进行拆分: .OrderBy(yearMonthStr => { var tokens = yearMonthStr.Split('/'); return int.

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


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

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

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

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

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

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

method1Result
显示我将要做的事情(假设数据总是有效的)。主要优点是您有
DateTime
对象,这样以后就更容易使用

method2Result
不要使用
DateTime。请根据问题中的要求进行分析。但是,它会导致代码变长,结果不太可用(如果需要返回匿名结构,则必须用定义的匿名结构替换匿名结构)

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);

好的,正如另一个答案中所指出的,您可以这样做。我的答案使用匿名结构,因此排序应该更有效

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);