合并Schedule与Registered列表实现完整时长覆盖的技术问询
解决方案:基于Schedule总时长与Registered时间间隔生成完整时间段列表
嘿,我来帮你拆解这个需求,核心就是要兼顾两个目标:先把Registered里的所有时间间隔都完整覆盖,再把Schedule里的总时长彻底耗尽。我给你一步步捋清楚逻辑,再举个实际例子让你一眼明白。
核心逻辑拆解
- 第一步:优先复用Registered的时间间隔
先把Registered列表里的所有时间段原封不动地放进新列表中,同时统计这些时间段的累计时长。用Schedule的总时长减去这个累计值,就能得到还需要填充的剩余时长。 - 第二步:按规则补全剩余时长
根据需求里提到的「对应类型」(通常是沿用Registered最后一个时间段的类型,或者有预设的类型规则),持续生成新的时间段:- 如果剩余时长≥预设的时间间隔,就生成一个对应类型+预设间隔的时间段,剩余时长同步扣除该间隔;
- 如果剩余时长<预设间隔,直接生成一个对应类型+剩余时长的时间段,把最后一点时长耗尽。
实际示例(更直观)
假设我们有以下输入:
- Schedule总时长:10小时
- Registered列表:
[("会议", 2小时), ("研讨", 3小时)](用「类型+时长」的元组表示每个时间段)
第一步:计算已用时长
Registered的累计时长 = 2 + 3 = 5小时,剩余需填充时长 = 10 - 5 = 5小时
第二步:补全剩余时长(假设规则:沿用最后一个类型「研讨」,按2小时固定间隔生成)
- 生成第一个补全段:
("研讨", 2小时),剩余时长变为5-2=3小时 - 生成第二个补全段:
("研讨", 2小时),剩余时长变为3-2=1小时 - 生成最后一个补全段:
("研讨", 1小时),剩余时长变为0,总时长耗尽
最终生成的新列表
[("会议", 2小时), ("研讨", 3小时), ("研讨", 2小时), ("研讨", 2小时), ("研讨", 1小时)]
额外注意点
- 如果Registered是空列表,那直接从预设的初始类型开始,按规则生成时间段直到耗尽Schedule总时长即可;
- 关于「对应类型」的规则,如果需求里有特殊定义(比如剩余时长>3小时用「培训」类型,否则用「答疑」),一定要把规则明确后再落地;
- 全程要保证时长单位统一,别出现分钟、小时混用的情况,避免计算错误。
内容的提问来源于stack exchange,提问作者Kapil Chhatwani
相关产品推荐
相关产品推荐

