如何
List<DateTime>
到List<List<DateTime>>
那个区别是1
:
例如列表是
var list = new List<DateTime>()
{
new DateTime(2023, 05, 02),
new DateTime(2023, 05, 03),
new DateTime(2023, 05, 04),
new DateTime(2023, 05, 10),
new DateTime(2023, 05, 11),
new DateTime(2023, 05, 20),
};
我希望我的方法返回这个列表
{
2023-05-02,
2023-05-03,
2023-05-04
},
{
2023-05-10,
2023-05-11
},
{
2023-05-20
}
您可以尝试在 Linq 的帮助下循环并构建答案,例如
using System.Linq;
...
private static List<List<DateTime>> Solve(IEnumerable<DateTime> source) {
List<List<DateTime>> result = new();
if (source is null)
return result;
foreach (var date in source.OrderBy(item => item))
if (result.Count > 0 && result.Last().Last().AddDays(1) == date)
result.Last().Add(date);
else
result.Add(new List<DateTime>() { date });
return result;
}
循环遍历日期并检查当前日期与前一个日期的差距是否小于 1 天。如果是,则将其添加到当前列表中,否则开始一个新列表。
private List<List<DateTime>> GetListsOfConsecutiveDates(List<DateTime> dates)
{
var result = new List<List<DateTime>>();
var currentList = new List<DateTime>();
var previousDate = dates.First();
currentList.Add(previousDate);
foreach (var date in dates.Skip(1))
{
if (date - previousDate <= TimeSpan.FromDays(1))
{
currentList.Add(date);
}
else
{
result.Add(currentList);
currentList = new List<DateTime> { date };
}
previousDate = date;
}
result.Add(currentList);
return result;
}