You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby如何按星期名称排序哈希以计算会议空闲时间段

日程排序实现方法

你可以通过「自定义星期权重+时间转数值」的方式完成排序,不需要修改原有哈希结构,实现逻辑如下:

  • 首先定义星期缩写对应的排序权重,解决字符串星期无法按自然周顺序排序的问题
  • 排序时将会议开始时间转换为当日0点起累计的分钟数,作为同天内会议的排序依据
  • Ruby的sort_by方法支持数组形式的排序键,会按数组元素的优先级依次完成对比排序

具体实现代码

# 星期权重映射,可根据业务的周起始规则调整
# 如果周日为一周第一天,就把"Sun"的映射值改为0,其余依次后移即可
DAY_ORDER = {
  "Mon" => 0,
  "Tue" => 1,
  "Wed" => 2,
  "Thu" => 3,
  "Fri" => 4,
  "Sat" => 5,
  "Sun" => 6
}

sorted_schedule = schedule_hash.sort_by do |item|
  # 第一排序维度:星期的先后顺序
  day_rank = DAY_ORDER[item[:day]]
  # 第二排序维度:同天内按会议开始时间从早到晚排列
  start_hour, start_min = item[:time].split('-').first.split(':').map(&:to_i)
  start_total_min = start_hour * 60 + start_min
  [day_rank, start_total_min]
end

排序效果说明

执行上述代码后,示例日程会按如下顺序排列,可直接用于后续空闲时间计算:

  • Mon 05:00-13:00
  • Mon 15:00-21:00
  • Tue 03:30-18:15
  • Tue 19:00-20:00
  • Wed 04:25-15:14
  • Wed 15:14-22:40
  • Thu 00:00-23:59
  • Fri 05:00-10:00
  • Fri 16:30-23:50
  • Sat 02:00-06:00
  • Sat 10:00-24:00
  • Sun 01:00-04:00
  • Sun 10:00-20:00

后续计算提示

排序完成后遍历日程即可计算空闲时长:

  • 同天内的空闲时长 = 下一场会议开始时间(转分钟) - 上一场会议结束时间(转分钟),结果为正就是有效空闲
  • 跨天空闲需要单独计算:当天最后一场会议结束到24:00的时长,加次日00:00到第一场会议开始的时长
  • 示例中周四的会议结束时间是23:59,到周五0点仅有1分钟间隔

内容的提问来源于stack exchange,提问作者mr_muscle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 21:15:19