c# - C#如何在日期之间的while或for循环中应用替代模式
问题描述
我有(开始日期)01-03-2021 到(结束日期)22-03-2021 之间的日期列表/数组
我想应用一个替代模式,例如,如果它的 2/3 模式,我将根据上面的日期得到这样的输出:
- 01-03-21 - 红色
- 02-03-21 - 红色
- 03-03-21 - 蓝色
- 04-02-21 - 蓝色
- 05-03-21 - 蓝色
- 06-03-21 - 红色
- 08-03-21 - 红色
- 09-03-21 - 蓝色
- 10-03-21 - 蓝色
- 11-03-21 - 蓝色
等到结束日期
你可以看到有一个模式。
var start = new DateTime(2020, 3, 1);
var end = new DateTime(2020, 3, 22);
int reds = 2, blues = 3;
DateTime currentDay = start;
while (currentDay <= end)
{
// Console.WriteLine("***")
}
解决方案
下面的代码创建了一个字典,将每个日期与其颜色相关联。
var colors = new [] { "Red", "Red", "Blue", "Blue", "Blue" };
var start = new DateTime(2020, 3, 1);
var end = new DateTime(2020, 3, 22);
var colorByDateTime = new Dictionary<DateTime, string>();
DateTime current = start;
int dateTimeIndex = 0;
while (current <= end)
{
colorByDateTime.Add(current, colors[dateTimeIndex % colors.Length]);
current = current.AddDays(1);
dateTimeIndex++;
}
你也可以使用 Linq。既然你提到你的日期在一个集合中:
var colors = new [] { "Red", "Red", "Blue", "Blue", "Blue" };
Dictionary<DateTime, string> colorByDateTime = dateTimes
.Select((dt, i) => new { dt, i })
.ToDictionary(e => e.dt, e => colors[e.i % colors.Length]);
应该产生相同的字典。
推荐阅读
- spartacus-storefront - 标题的 Spartacus 布局无法使其为空 Spartacus 3.2.2
- python - 如何在 Python 中删除部分 PNG 图像以使其不透明
- html - antlr4:如何识别像“aaaaa”bbb“ddddd”这样的字符串
- javascript - 为什么只有 keydown 有效,而 keyup 或 keypress 无效?
- reactjs - React 自定义 Hooks 和常规函数的区别
- r - 每次循环运行时,如何将输出保存在矩阵的一行中?
- javascript - 为什么内部服务器错误?“xhr.js?b50d:184 POST http://localhost:3000/api/500(内部服务器错误)”“错误:请求失败,状态码 500”
- graphics - 如何确定对象变换的限制
- python - dm 的用户 id/bot devs 的 Discord.py 建议命令
- r - R - 从右边查找和提取字符串