软件开发过程中,总是有各种各样的逻辑需要去设计实现,本文分享对于不重叠的多个时间段思路。
我们假设下多时段的结构:timeStart1-timeEnd1,timeStart2-timeEnd2,timeStart3-timeEnd3。。。
首先,数据一定是成对出现,那么我们可以对每一组按照timeStart进行排序。
然后,要实现分段不重叠,那么我们可以逐个对比当前timeEnd与下一个timeStart是否小于关系。
最终,如果此过程都满足条件,那么完成排序结果
上述过程其实隐藏了一个排序方法:List<TimeGroup>没有自带的按照其中第一个列(timeStart)排序的方法支持。因此这里需要进行改造Sort来实现。实现方式是,对TimeGroup对象进行Compare重写。代码如下(以C#为例):
/// <summary>
/// 多时段对象,按照开始时间升序排列
/// </summary>
public class TimeGroup : IComparable
{
public DateTime timeStart { get; set; }
public DateTime timeEnd { get; set; }
int IComparable.CompareTo(object obj)
{
if (obj == null)
{
return -1;//空值当作最小,用 -1 表示
}
TimeGroup m = obj as TimeGroup;
return -m.timeStart.CompareTo(this.timeStart);//负号表示升序(时间从早到晚)
}
}
该排序规则的使用方法是Sort()方法,代码如下:
List<TimeGroup> timelist = new List<TimeGroup> ();
timelist.Add(new TimeGroup(){new DateTime(2020,1,1),new DateTime(2020,1,2),});
timelist.Add(new TimeGroup(){new DateTime(2020,3,1),new DateTime(2020,3,2),});
timelist.Add(new TimeGroup(){new DateTime(2020,2,1),new DateTime(2020,2,2),});
//这段代码会将timelist集合按照timeStart列进行排序
timelist.Sort();
原文地址:
https://www.opengps.cn/Blog/View.aspx?id=712
文章的更新编辑依此链接为准。欢迎关注源站原创文章!