我正在尝试构建帮助程序以从列表中选择下一个可用日期。
我有一个天数列表作为参考(那些是我想要发生事情的日子)
class_list = ["Monday","Saturday","Sunday"]
我需要查看当天并在列表中进行匹配。 如果它是列表的一部分,我选择它,如果不是,我从列表中选择下一个。
这是我到目前为止所做的:
#select current day, get its name value and weekday number value
today = Time.now
today_name = today.strftime("%A")
#not sure which of the 2 following line is better
#today_index = DateTime.parse(today_name).wday
today_index = today.strftime("%u").to_i
然后我做匹配
if class_list.include? today_name
#victory!!!
puts today_name
else
puts "find next day"
class_list.each do |x|
if DateTime.parse(x).wday > today_index
puts "result #{x}"
break
end
end
end
当我运行它似乎工作正常,但因为我只是学习Ruby我总是想知道我是不是过于复杂的事情。
这段代码对你们Ruby主人来说是否合适?
答案 0 :(得分:1)
我最好有一个地图将某一天与下一天联系起来,如果找不到这一天,我会有一个默认值:
days = {:Monday => :Tuesday, :Tuesday => :Wednesday ...}
days.default = :Monday
当你做几天[:星期一]时,你得到:星期二 当您尝试获取不存在的条目时,您将获得默认值。
答案 1 :(得分:1)
对于这部分:
if class_list.include? today_name
#victory!!!
puts today_name
else
puts "find next day"
class_list.each do |x|
if DateTime.parse(x).wday > today_index
puts "result #{x}"
break
end
end
end
你可以这样写:
if class_list.include? today_name
#victory!!!
puts today_name
else
puts "find next day"
result = class_list.find {|e| DateTime.parse(e).wday > today_index }
puts "result = #{result}"
end
答案 2 :(得分:1)
require 'date'
def next_date_from(ar)
cur_day = Date.today
cur_day += 1 until ar.include?(cur_day.strftime('%A'))
cur_day
end
puts next_date_from(%w(Monday Saturday Sunday))
#=>2011-10-01