c# - C# Linq - 根据开始时间和结束时间的时间差分组
问题描述
我有一个看起来像这样的对象:
[
{ StartTime: "05/21/2020 10:00", EndTime: "05/21/2020 10:30" },
{ StartTime: "05/21/2020 11:00", EndTime: "05/21/2020 11:30" },
{ StartTime: "05/21/2020 12:00", EndTime: "05/21/2020 12:30" },
{ StartTime: "05/21/2020 15:00", EndTime: "05/21/2020 15:30" },
{ StartTime: "05/21/2020 16:00", EndTime: "05/21/2020 16:30" },
{ StartTime: "05/21/2020 18:00", EndTime: "05/21/2020 18:30" },
{ StartTime: "05/21/2020 19:00", EndTime: "05/21/2020 19:30" },
{ StartTime: "05/21/2020 20:00", EndTime: "05/21/2020 20:30" },
{ StartTime: "05/21/2020 21:00", EndTime: "05/21/2020 21:30" }
]
我想使用 linq 对它们进行分组以创建如下所示的对象,分组依据应基于第一个对象的结束时间和下一个对象的开始时间之间的时间差,正如您在对象数组中看到的那样,前三个对象的下一个对象的结束时间和开始时间之间有 30 分钟的差异,因此表明它们彼此相关,所以我应该取第一个对象的开始时间和最后一个对象的结束时间并创建一个像这样的对象:
[
{ StartTime: "05/21/2020 10:00", EndTime: "05/21/2020 12:30" },
{ StartTime: "05/21/2020 15:00", EndTime: "05/21/2020 16:30" },
{ StartTime: "05/21/2020 18:00", EndTime: "05/21/2020 21:30" }
]
解决方案
EndTime
如果我理解正确,您需要合并那些在 previous和 current之间相差小于或等于 30 分钟的记录StartTime
。
所以假设你的数组要排序,这是我能想到的最简单的方法:
public List<YourObject> MergeTimes(List<YourObject> list)
{
List<YourObject> result = new List<YourObject>();
result.Add(list.First());
for (int i = 1; i < list.Count; i++)
{
if ((list[i].StartTime - list[i - 1].EndTime).TotalMinutes <= 30)
result.Last().EndTime = list[i].EndTime;
else
result.Add(new { StartDate = list[i].StartTime, EndTime = list[i].EndTime });
}
return result;
}
推荐阅读
- java - Java frontend beginner
- react-native - Visual Studio Code for macOS syntax error only for React Native 0.61
- json - 如何使颤振能够查看更难的 API,这些 API 要求不同的变量来访问它们?
- java - Does static has special meaning in Java Threads?
- arrays - How to find the minimum no of swaps needed to sort an array with duplicate elements?
- apache-kafka - 识别 Kafka 消费者中哪个主题有记录
- reactjs - How to hide a hovering menu after click on Link in react-router-dom
- node.js - Discord.js - Delete messages without image
- python - AttributeError: __enter__: requests.get Python
- javascript - React:重复调用组件 setState