gpt4 book ai didi

c# - 这里提供所需信息量的最简单的数据结构是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 13:47:08 25 4
gpt4 key购买 nike

您将如何构造一个数据结构 - 表示为下面的 Schedule 类 - 它将为您提供足够的信息,以便为您的 ExtensionMethod 提供简单且足够的信息,以便它可以设置 testResult_# 变量.

请注意:我不是在问如何实现 GetScheduleById(string) 方法,而是在要求以 aw 方式定义 Schedule 数据结构,它可以通过提供所有此方法所需的信息。

var datetimeUnderTest = DateTime.Now;
Schedule workingDaysSchedule = ScheduleRepository.GetScheduleById("dubaiWorkingDays");
Schedule workingHoursSchedule = ScheduleRepository.GetScheduleById("usaWorkingHours");
Schedule winterSchedule = ScheduleRepository.GetScheduleById("brasilWinter");
Schedule nightsInWeekendSchedule = ScheduleRepository.GetScheduleById("NightsInWeekends");
Schedule nightsInWeekDaysSchedule = ScheduleRepository.GetScheduleById("NightsInWeekDays");

// IsInSchedule is an Extension method on DateTime
bool testResult_0 = datetimeUnderTest.IsInSchedule(workingDaysSchedule );
bool testResult_1= datetimeUnderTest.IsInSchedule(workingHoursSchedule );
bool testResult_2 = datetimeUnderTest.IsInSchedule(winterSchedule);
bool testResult_3 = datetimeUnderTest.IsInSchedule(nightsInWeekendSchedule );
bool testResult_4 = datetimeUnderTest.IsInSchedule(nightsInWeekDaysSchedule );

谢谢!

最佳答案

在我看来,Schedule 只是日期/时间范围的列表。或者,也许是 7 周中每一天的一组时间范围。例如,workingDaysSchedule 可能包含每天(周一到周五)的一个条目。该条目将从 00:00 到 23:59:59。

nightsInWeekendSchedule 将包含周五和周六的条目,无论夜间时间是多少。

最简单的建模方法(不一定是最有效的)是这样的:

class TimeRange
{
public DateTime StartTime { get; set; }
public DateTime EndTime { get; set; }
}

class Schedule
{
private List<List<TimeRange>> Days = new List<List<TimeRange>>
{
new List<TimeRange>(), // Sunday
new List<TimeRange>(), // Monday
// etc.
};
public Add(DayOfWeek day, DateTime startTime, DateTime endTime);
public Contains(DateTime test);
}

给定一个 DateTime 值,您可以找到星期几 ( DateTime.DayOfWeek ),然后对这一天的范围列表进行线性搜索。

您必须考虑一些复杂情况。例如,周五晚上 11:00 到早上 7:00 的类次实际上有两个范围:周五晚上 11:00 到午夜,然后是周六凌晨 12:01 到早上 7:00。您添加范围的代码必须拆分范围并添加到周五和周六的时间表。

或者,您可以避免 Add 方法的复杂性,而只需使用集合初始化语法对范围进行编码。

关于c# - 这里提供所需信息量的最简单的数据结构是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14922695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com