我有一個列表「網站」與項目,如「年」的一個。它被定義爲字符串,格式爲「MM/YYYY」。 數據的「年」是分割字符串和排序 - LINQ的
01/2012
04/2012
01/2013
06/2012
我明白,我可以使用DateTime.Parse
將字符串轉換和排序。但我想分割字符串並使用linq進行排序。是否有可能將MM和yyyy分開排序?
我有一個列表「網站」與項目,如「年」的一個。它被定義爲字符串,格式爲「MM/YYYY」。 數據的「年」是分割字符串和排序 - LINQ的
01/2012
04/2012
01/2013
06/2012
我明白,我可以使用DateTime.Parse
將字符串轉換和排序。但我想分割字符串並使用linq進行排序。是否有可能將MM和yyyy分開排序?
那麼,在對方的回答表明,你可以做到這一點。我的答案使用匿名結構,所以排序應該更有效率。
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);
當然,這可以輕鬆完成。然而,這是低效的,因爲你必須做的每個比較分裂:
.OrderBy(yearMonthStr => {
var tokens = yearMonthStr.Split('/');
return int.Parse(tokens[0]) + 100*int.Parse(tokens[1])
})