我有一个日期列表(格式为yyyyMM
的字符串),如下所示:
201608
201609
201610
201708
201709
201710
我想将它们重新排序如下:
201608
201708
201609
201709
201610
201710
我以为我可以颠倒字符串(即016102
)以对其排序但是显然,如果一个月大于等于10,它会导致导致列表出现问题,例如:
201610
201710
201608
201708
201609
201709
我尝试了以下操作:
MyList.OrderBy(n => string.Concat(n.datestring.Reverse())).Select(n => n);
是否有一个很好的简洁方法(LINQ会很好)?感谢您的帮助。
答案 0 :(得分:4)
使用LINQ,您可以按两位数字的月份排序,然后按年份(和月份)排序:
var ans = src.OrderBy(s => s.Substring(4)).ThenBy(s => s);
答案 1 :(得分:1)
我会通过扩展方法亲自作弊并按日期排序:
新课:
public static class DateOperations
{
public static List<DateTime> GetDates(this List<string> dateStrings)
{
List<DateTime> asDates = new List<DateTime>();
dateStrings.ForEach(e =>
asDates.Add(DateTime.ParseExact(e, "yyyyMM", CultureInfo.InvariantCulture, DateTimeStyles.None))
);
return asDates;
}
}
然后:
var ordered = myList.GetDates().OrderBy(ord => ord.Month).ThenBy(then => then.Year);
然后当我再次需要字符串时,我将使用:
date[_whateverAccessorReally].ToString("yyyyMM");