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; }
}
}
}