c# 多时间段去重

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApp4
{
    public class Program
    {

        public static void Main()
        {
            List<TimeRange> list = AddTime();

            List<TimeRange> TimeNew = ExtractCombination(list).OrderBy(c => c.StartPoint).ThenBy(c => c.EndPoint).ToList();


            for (var i = 0; i < TimeNew.Count; i++)
            {
                Console.WriteLine(TimeNew[i].StartPoint.ToString("HH:mm:ss") + "----" + TimeNew[i].EndPoint.ToString("HH:mm:ss"));
            }
        }



        static List<TimeRange> ExtractCombination(List<TimeRange> list)
        {
            list = list.OrderByDescending(c => c.StartPoint).ThenByDescending(c => c.EndPoint).ToList();
            if (list.Count <= 1)
            {
                return list;
            }
            int num = list.Count - 1;
            for (int i = list.Count - 2; i >= 0; i--)
            {
                if (list[i].StartPoint >= list[num].StartPoint && list[i].StartPoint < list[num].EndPoint)
                {
                    if (list[i].EndPoint <= list[num].EndPoint)
                    {
                        list.Remove(list[i]);
                    }
                    else if (list[i].EndPoint > list[num].StartPoint)
                    {
                        list[i].StartPoint = list[num].EndPoint;
                    }
                }
                else if (list[i].StartPoint<= list[num].StartPoint&& list[i].EndPoint<= list[num].EndPoint)
                {
                    list.Remove(list[i]);
                }
                else if (list[i].StartPoint <= list[num].StartPoint && list[i].EndPoint > list[num].EndPoint)
                {
                    list[i].StartPoint = list[num].EndPoint;
                }
                num = num - 1;

            }

            return list;
        }

        static List<TimeRange> AddTime()
        {
            var extractListOld = new List<TimeRange>();
            extractListOld.Add(new TimeRange() { StartPoint = Convert.ToDateTime("2022-07-03 08:00:00"), EndPoint = Convert.ToDateTime("2022-07-03 10:00:00") });

            extractListOld.Add(new TimeRange() { StartPoint = Convert.ToDateTime("2022-07-03 08:00:00"), EndPoint = Convert.ToDateTime("2022-07-03 12:00:00") });
            extractListOld.Add(new TimeRange() { StartPoint = Convert.ToDateTime("2022-07-03 08:00:00"), EndPoint = Convert.ToDateTime("2022-07-03 11:00:00") });
            extractListOld.Add(new TimeRange() { StartPoint = Convert.ToDateTime("2022-07-03 11:00:00"), EndPoint = Convert.ToDateTime("2022-07-03 16:00:00") });
            extractListOld.Add(new TimeRange() { StartPoint = Convert.ToDateTime("2022-07-03 14:00:00"), EndPoint = Convert.ToDateTime("2022-07-03 18:00:00") });
            extractListOld.Add(new TimeRange() { StartPoint = Convert.ToDateTime("2022-07-03 16:00:00"), EndPoint = Convert.ToDateTime("2022-07-03 22:00:00") });

            return extractListOld;
        }

        public class TimeRange
        {
            public DateTime StartPoint { get; set; }

            public DateTime EndPoint { get; set; }
        }
    }
}

 

posted @ 2022-07-13 18:26  三醉  阅读(141)  评论(0编辑  收藏  举报