Ruby: программа выбора дня (выберите следующий доступный день из списка) - PullRequest
0 голосов
/ 30 сентября 2011

Я пытаюсь создать помощника для выбора следующего доступного дня из списка.

У меня есть список дней для справки (это день, когда я хочу, чтобы что-то произошло)

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, мне всегда интересно, не усложняю ли я вещи.С вами все в порядке, мастера Руби?

Ответы [ 3 ]

1 голос
/ 30 сентября 2011

Для части:

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 
1 голос
/ 30 сентября 2011
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
1 голос
/ 30 сентября 2011

Мне бы лучше иметь карту, связывающую данный день со следующим и значением по умолчанию, если день не найден:

days = {:Monday => :Tuesday, :Tuesday => :Wednesday ...}
days.default = :Monday

Когда вы делаете дни [: понедельник] вы получаете: вторник когда вы пытаетесь получить несуществующую запись, вы получаете значение по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...