【发布时间】:2016-06-11 22:06:10
【问题描述】:
我必须实现类似于Outlook Meeting Organizer 的调度算法,其中我有几个人参加会议,并且组织者找到邀请列表中的所有人都可用的时间段。因此,假设我有一个实现以下接口的 3rd 方服务:
interface IAvailabilityProvider
{
IEnumerable<DateTimeInterval> GetPersonAvailableTimeSlots(
string personName, DateTime startFrom);
}
日期时间间隔在哪里:
class DateTimeInterval{
public DateTime Start {get;set;}
public TimeSpan Length {get;set;}
}
GetPersonAvailableTimeSlots 返回infinite iterator,它会枚举人工作时间的所有时间段,不包括周末和节假日之类的,无限到未来。
我的任务是实现一个函数,该函数采用一组迭代器并返回另一个交叉点的迭代器:
IEnumerable<DateTimeInterval> GetIntersections(
string[] persons, DateTime startFrom);
它获取所有人可用时隙的迭代器,并在所有这些人都可用时返回相交的时隙。在内部我必须实现以下功能:
IEnumerable<DateTimeInterval> GetIntersections(
IEnumerable<DateTimeInterval>[] personsAvailableSlots);
【问题讨论】:
-
第 3 方服务返回的迭代器中的时隙有多大?
-
您似乎使用了 DateTimeRange 类而没有对其进行定义。这些也应该是 DateTimeInterval 还是其他?
-
不是我是 C# 专家,但不是你的函数
GetIntersections试图执行无限量的操作(并且还接收无限量的数据作为输入)。 -
@moreON,谢谢。通过 DateTimeRange 我的意思是 DateTimeInterval - 忘记在任何地方重命名它。固定。
-
@displayName,时隙可以是任意大小。它可能来自 DateTime.MinValue->TimeSpan.MaxValue 以及 5 分钟槽。
标签: c# algorithm iterator infinite-loop