var result = new Dictionary<(TimeOnly, TimeOnly), int>();
var intervals = Availables.Values.OrderBy(interval => interval.Item1).ToList(); //sort by start time
var interval = intervals.First();
var availableMembers = 1;
for (var i = 1; i < Availables.Count; i++)
{
var currentInterval = intervals[i];
var currentStart = currentInterval.Item1;
var currentEnd = currentInterval.Item2;
var previousInterval = intervals[i - 1];
var previousEnd = previousInterval.Item2;
if (currentStart > previousEnd) //no overlap
{
result.Add(interval, availableMembers);
availableMembers = 1;
continue;
}
availableMembers++;
var minEnd = currentEnd < previousEnd ? currentEnd : previousEnd;
interval = (currentStart, minEnd);
}
return result;
var result = new Dictionary<(TimeOnly, TimeOnly), int>();
var intervals = Availables.Values.OrderBy(interval => interval.Item1).ToList(); //sort by start time
var interval = intervals.First();
var availableMembers = 1;
for (var i = 1; i < Availables.Count; i++)
{
var currentInterval = intervals[i];
var currentStart = currentInterval.Item1;
var currentEnd = currentInterval.Item2;
var previousInterval = intervals[i - 1];
var previousEnd = previousInterval.Item2;
if (currentStart > previousEnd) //no overlap
{
result.Add(interval, availableMembers);
availableMembers = 1;
continue;
}
availableMembers++;
var minEnd = currentEnd < previousEnd ? currentEnd : previousEnd;
interval = (currentStart, minEnd);
}
return result;