如何在Ruby中生成全天时分秒数组及验证哈希键格式
在Ruby中生成全秒级时间数组
可以通过时间戳范围结合格式化来快速生成包含当天所有秒级时间的数组,代码如下:
# 生成从00:00:00到23:59:59的所有时间字符串数组 array_time = (0..86399).map do |seconds| Time.at(seconds).utc.strftime("%H:%M:%S") end
逻辑说明:一天共86400秒(24×60×60),0..86399覆盖了当天每一秒的时间戳;Time.at(seconds)将秒数转为时间对象,utc避免本地时区偏移影响结果,strftime("%H:%M:%S")把时间格式化为24小时制的时分秒字符串。
验证哈希子键的格式
先指出你原代码的两个问题:
- 哈希的
each遍历需要同时接收键和值,原代码each do |key|写法错误 - Ruby数组的包含判断方法是
include?,不是includes
另外你给出的哈希子键是带单引号的"'00:00:00'",而array_time中的元素是不带单引号的"00:00:00",分两种情况处理验证:
情况1:保留带单引号的键
需要先去除键两端的单引号再检查:
hash = { "time" => { "'00:00:00'" => "23:59:59" } } # 验证所有子键格式是否正确 valid = hash["time"].all? do |key, _| array_time.include?(key.gsub(/\A'|'\z/, '')) end
情况2:调整哈希键为不带单引号的格式
如果可以修改哈希的键格式,验证逻辑会更简洁:
hash = { "time" => { "00:00:00" => "23:59:59" } } valid = hash["time"].keys.all? { |key| array_time.include?(key) }
内容的提问来源于stack exchange,提问作者Davi Luis
相关产品推荐
相关产品推荐

