Ruby - Скажите пользователю, какая стадия дня и время года (используйте Hash) - PullRequest
1 голос
/ 31 октября 2019

У меня вопрос к следующей задаче.

1) Скажите пользователю, какое сейчас время года. Условие - мне нужно использовать хеш.

  • То, что я хочу, чтобы зациклить сезоны и найти элемент, эквивалентный current_month, равному 10. Затем извлеките его ключ, пружину. Не могли бы вы дать мне подсказку о том, как мне следует изменить мой текущий метод .map?

2) Скажите пользователю, какая стадия дня (утро, полдень, день, вечер, ночь, полночь). (Используйте хэш)

  • Я хочу сравнить текущий час значения дня и получить ключ соответствующего значения.
  • Я создал часовые диапазоны. Есть ли другой способ их создания?

Спасибо!

current_month = Time.now.month
current_day = Time.now.yday 
current_hour_of_day = Time.now.hour 

seasons = {"spring" => [9,10,11],
    "summer" => [12,1,2], 
    "autumn" => [3,4,5],
    "winter" => [6,7,8]
    }

current_season = seasons.map do |k,v|
    if seasons[v].include?(current_season)
    puts "It is #{seasons[k]}." 
    end 
end 



current_hour_of_day = Time.now.hour 
day_stage = {"morning" => current_hour_of_day >= 6 && current_hour_of_day <= 12,
    "noon" => current_hour_of_day > 12 && current_hour_of_day <= 14,
    "afternoon" => current_hour_of_day >= 18 && current_hour_of_day <= 20,
    "evening" =>  current_hour_of_day >= 18 && current_hour_of_day <= 20, 
    "nighttime" => current_hour_of_day >= 21 && current_hour_of_day <= 23,
    "midnight" => current_hour_of_day == 24
    }

day_stage.each do |stg, hr|
    if hr === Time.now.strftime('%B') 
        puts "It is #{day_stage[stg]}"
    end 
end 

puts day_stage

1 Ответ

3 голосов
/ 31 октября 2019

Вы используете хэш неправильно. Хеш - это инструмент / тип, который предоставляет возможность эффективно находить значение на основе ключа.
Если вы зацикливаете хеш, вам не нужно использовать хеш, а только коллекцию (массив, перечисляемый или заданный)

Поскольку количество месяцев и часов в дне ограничено, а их значения уникальны, вы можете использовать его как ключ, а сезон или этап дня - как значение.

months = {
    1 => "summer",
    2 => "summer",
    3 => "autumn",
    4 => "autumn",
    5 => "autumn",
    6 => "winter",
    7 => "winter",
    8 => "winter",
    9 => "spring",
    10 => "spring",
    11 => "spring",
    12 => "summer",
}

Тогда нахождение текущего сезона будет O(1) операция в одной строке кода

current_season = seasons[current_month]
...