C#对一组时间段List集合排序查重的思路

[软件开发] 季雨林 2020/6/1 20:44:52

软件开发过程中,总是有各种各样的逻辑需要去设计实现,本文分享对于不重叠的多个时间段思路。


我们假设下多时段的结构: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 文章的更新编辑依此链接为准。欢迎关注源站原创文章!

评论

暂无评论!

发表评论:

用于接收作者回复信息
点击更换验证码 - openGPS提示