首页 > 解决方案 > Ruby - 告诉用户一天中的哪个阶段和一年中的哪个季节(使用哈希)

问题描述

我对以下挑战有疑问。

1) 告诉用户现在是一年中的什么季节。条件是我需要使用哈希。

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

标签: rubyloopshashkey-value

解决方案


您使用哈希错误。哈希是一种工具/类型,它提供了基于键有效查找值的可能性。
如果你是循环散列,那么你不需要使用散列,而是集合(数组,可枚举或集合)

因为一天中的月数和小时数是有限的,并且它们的值是唯一的,所以您可以将其用作键,并将一天中的季节或阶段用作值。

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]

推荐阅读