首页 > 解决方案 > C#如何在日期之间的while或for循环中应用替代模式

问题描述

我有(开始日期)01-03-2021 到(结束日期)22-03-2021 之间的日期列表/数组

我想应用一个替代模式,例如,如果它的 2/3 模式,我将根据上面的日期得到这样的输出:

等到结束日期

你可以看到有一个模式。

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("***")
}

标签: c#asp.net.netasp.net-core

解决方案


下面的代码创建了一个字典,将每个日期与其颜色相关联。

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]);

应该产生相同的字典。

链接到小提琴


推荐阅读