我有一个字符串列表,表示缩短的月份:Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec
如果我以随机顺序得到这些值,我如何按上面的顺序排序:Jan, Feb, Mar ...?
List<string> months = new List<string>();发布于 2015-07-14 11:56:24
你为什么不使用这个订单列表:
List<string> months = Enumerable.Range(1, 12)
.Select(m => DateTimeFormatInfo.InvariantInfo.GetAbbreviatedMonthName(m))
.ToList();清单包括:
[0] "Jan"
[1] "Feb"
[2] "Mar"
[3] "Apr"
[4] "May"
[5] "Jun"
[6] "Jul"
[7] "Aug"
[8] "Sep"
[9] "Oct"
[11] "Dec" 如果要在当前语言中使用月份名称:
DateTimeFormatInfo.CurrentInfo.GetAbbreviatedMonthName(m)如果您现在有另一个包含月份名称的列表,并且这个列表包含重复的或不完整的列表,但是您想要自然地对这个列表进行排序,那么您可以使用IndexOf。
monthList = monthList.OrderBy(s => months.IndexOf(s)).ToList();下面是另一种方法,它不需要另一个列表进行比较,而是使用DateTime.ParseExact
monthList = monthList
.OrderBy(s => DateTime.ParseExact(s, "MMM", DateTimeFormatInfo.InvariantInfo))
.ToList();发布于 2015-07-14 11:55:06
已经为你做了一件:)
从DateTimeFormatInfo.MonthNames上看一下
公共string[] MonthNames { get;set;} 包含月份特定区域性全名的类型字符串的一维数组。在12个月的日历中,数组的第13个元素是一个空字符串。InvariantInfo的数组包含“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”和“。
编辑:我发现这个问题可能有用
发布于 2015-07-14 12:06:57
您可以使用DateTime.ParseExact方法来实现这一点。
var months = new[] { "Jan", "Apr", "Sep", "Oct", "May", "Jun", "Jul", "Feb", "Mar", "Aug", "Nov", "Dec" };
var sortedMonthNames = months
.Select(m => new {Name = m, Date = DateTime.ParseExact(m, "MMM", CultureInfo.InvariantCulture)})
.OrderBy(m => m.Date.Month)
.Select(m => m.Name)
.ToArray();https://stackoverflow.com/questions/31405746
复制相似问题