什么是适合周期性或重复日期的好数据结构?

12

是否有一种已发布的数据结构可以存储周期性或重复的日期?可以处理以下内容:

  1. 泵需要每五天循环一次。
  2. 发薪日是每两周的星期五。
  3. 感恩节是十月份的第二个星期一(美国:11月的第四个星期四)。
  4. 情人节是每年的2月14日。
  5. 至暑日通常在每年6月21日和12月21日。
  6. 复活节是在春分日后首个满月当天后的星期日(这个可能比较困难)。

我认为cron的内部数据结构可以处理#1,#4,#5(两条规则),或许可以处理#2,但是我还没有研究过它。微软Outlook和其他日历似乎能够处理前五个问题,但我没有那些源代码。


这可能会有所帮助:https://dev59.com/1HVD5IYBdhLWcg3wHnoX - molf
谢谢。如果我只是搜索“重复”的话,而不是“重复日期”,我会找到很多相关的问题。 - yukondude
3个回答

6

1
谢谢。我觉得 iCalendar 看起来有点过度,但也许它是最简单的解决方案。 - yukondude

0

由于指定重复方式的方式多种多样,我建议不要使用单个数据结构实现所有 5 种方案。

相反,我会(以前的项目中也是这样做的)构建简单的结构来处理每种类型的重复。您可以将它们全部包装起来,使其感觉像一个单一的数据结构,但在内部它们可以执行任何你想要的操作。通过实现接口,我能够以相似的方式处理每种类型的重复,这样感觉就像是一种通用的数据结构。我可以询问任何实例在特定时间范围内所有重复日期,然后问题就解决了。

在确定具体实现之前,我还想更多地了解这些日期需要如何使用。


1
是的,我认为您需要一个联合数据结构,因为表达重复的方式如此不同。然后,您需要一个接口,可以查询以查找某些日期是否与任何重复项匹配。回答您的问题,这些日期将用于预订电话/视频/网络会议,其中一些与国家假日重叠,因此有“十月第二个星期一”的业务。 - yukondude

0
如果您想亲手创建一个数据结构,我建议使用哈希表(其中假期或事件是键,新日期发生是值),如果每个发生有多重性,您可以将找到链接列表中的部分的值哈希,然后该列表具有所有发生的列表(这将使查找和插入运行在O(1))。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接