c# - 用于比较的订单日期列表

标签 c# arrays list linq datetime

我之前在这里问过这个问题:List of Dates ordered in a certain way

我认为提议的解决方案很好,直到我的日期列表上的那一年结束并遇到问题。

我的日期列表(以这种基于字符串的格式 - 这是数据从源 API 传给我的方式)

201711
201712
201801
201811
201812
201901

我想在条形图中显示我的数据,以显示3 个月按月顺序进行的同比比较。这意味着我按原样排序列表

201711
201811
201712
201812
201801
201901

这样我就可以按顺序查看 11 月、12 月和 1 月的同比条形图。

我已经尝试了问题底部的解决方案,但它的顺序是这样的(这不是我想要的):

201801
201901
201711
201811
201712
201812

为了清楚起见,下个月需要向前移动到这个日期列表:

我想要的第一个月总是比当前月份早 2 个月

201712
201812
201801
201901
201802
201902

var rowsInOrder = dateList.OrderBy(n => DateTime.ParseExact(n, "yyyyMM", CultureInfo.CurrentCulture).Month).ThenBy(n=> DateTime.ParseExact(n, "yyyyMM", CultureInfo.CurrentCulture).Year);

最佳答案

您可以使用这种首先确定月份组的查找方法:

var monthLookup = dateList
    .Select(s => new{String = s, Date = DateTime.ParseExact(s, "yyyyMM", CultureInfo.CurrentCulture)})
    .OrderBy(x => x.Date)  // not necessary in your sample data but i assume it's desired
    .ToLookup(x=> x.Date.Month);
var rowsInOrder = monthLookup.SelectMany(x => x).Select(x => x.String);

关于c# - 用于比较的订单日期列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54513984/

相关文章:

java - 在 do....while 语句中使用数组

c - 如何复制和分配数组数组?

python - 将字典列表分解为通用元素的字典

python - python中列表的否定

c# - 连接尝试失败,因为连接方在一段时间后没有正确响应。从 C# 调用存储过程时

c# - 我需要确保应用程序使用最少数量的数据库连接

c# - 如何从 C# Windows 窗体中的资源文件获取图像路径?

c# - 如何使用 Task.WhenAny 并实现重试

c# - 遍历列表列表?

javascript - 如何删除数组中对象的重复值?