ruby - Ruby - 告诉用户一天中的哪个阶段和一年中的哪个季节(使用哈希)
问题描述
我对以下挑战有疑问。
1) 告诉用户现在是一年中的什么季节。条件是我需要使用哈希。
- 我想要循环季节并找到一个相当于 current_month 的元素,即 10。然后提取它的键 spring。你能给我一个关于我应该如何修改我当前的 .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
解决方案
您使用哈希错误。哈希是一种工具/类型,它提供了基于键有效查找值的可能性。
如果你是循环散列,那么你不需要使用散列,而是集合(数组,可枚举或集合)
因为一天中的月数和小时数是有限的,并且它们的值是唯一的,所以您可以将其用作键,并将一天中的季节或阶段用作值。
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]
推荐阅读
- apache-zeppelin - 如何使用内置 spark 2.3.2 构建 zeppelin 0.8.0
- jquery - 如何使用 jquery 将所选行中的标签加粗?
- arrays - 对于 PowerShell ArrayList,哪个是 Faster .Add 或 += 运算符?
- android - 带有两个图像的 Android 面具
- javascript - 这个数组真的需要扩展语法吗?
- c# - 从 asp.net razor 视图调用 ajax 请求
- google-apps-script - Google Admin Directory API - 使用 google sheet 脚本授予对服务帐户的访问权限
- laravel - Laravel 模型不使用自定义创建方法
- c - C 中的内存泄漏
- windows - Composer 无法识别 git,尽管它位于系统 PATH 中