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