C# 根据优先级合并重复时间段,结束时间是上一个的结束时间
时间: 2024-03-27 11:38:08 浏览: 193
C#时间处理
如果您想要根据优先级合并重复时间段,并且将结束时间设置为上一个时间段的结束时间,可以使用 C# 中的 LINQ 查询和时间操作进行实现。以下是一个简单的示例代码:
```csharp
List<(DateTime start, DateTime? end)> timeRanges = new List<(DateTime start, DateTime? end)>()
{
(new DateTime(2022, 1, 1, 12, 0, 0), new DateTime(2022, 1, 1, 13, 0, 0)),
(new DateTime(2022, 1, 1, 12, 30, 0), new DateTime(2022, 1, 1, 14, 0, 0)),
(new DateTime(2022, 1, 2, 10, 0, 0), new DateTime(2022, 1, 2, 11, 0, 0)),
(new DateTime(2022, 1, 2, 11, 0, 0), new DateTime(2022, 1, 2, 12, 0, 0))
};
var result = timeRanges.OrderBy(tr => tr.start)
.Aggregate(new List<(DateTime start, DateTime end)>(), (acc, tr) =>
{
if (acc.Count == 0 || tr.start > acc.Last().end)
{
acc.Add((tr.start, tr.end ?? tr.start));
}
else if (tr.end > acc.Last().end)
{
acc[acc.Count - 1] = (acc.Last().start, tr.end ?? acc.Last().end);
}
return acc;
});
foreach (var timeRange in result)
{
Console.WriteLine($"{timeRange.start} - {timeRange.end}");
}
```
以上代码会将 timeRanges 列表中的时间段按照开始时间排序,然后使用 Aggregate 函数进行合并。如果当前时间段的开始时间晚于上一个时间段的结束时间,将当前时间段加入结果列表中;如果当前时间段的结束时间晚于上一个时间段的结束时间,将上一个时间段的结束时间设置为当前时间段的结束时间。最后输出合并后的时间段列表。
希望这个代码可以帮助到您。如果您还有其他问题,请继续提问。
阅读全文