你好,我刚刚进入 Ruby,我需要这项任务的帮助。任务是在这样的哈希中输入一周中的 7 天 {"星期一" => 1 , "星期二" =>2 ..等} 当用户输入 1-7 之间的数字时,它会显示相应的日期。因此,如果用户按 5 ,它会输出"星期五"。到目前为止,我已经提出了这个:
puts "Enter Number"
hash = {"Monday"=>1,"Tuesday"=>2,"Wednesday"=>3,"Thursday"=>4,"Friday"=>5,"Saturday"=>6,"Sunday"=>7}
hash.each do |x,y|
input = gets.to_i
print x if input == y
end
你的方式是正确的,只是你需要从用户那里获取输入,如果每个键的值都是整数,那么你可以考虑使用 chomp
和 to_i
,之后你可以使用 find,来检查哈希中的键,其中值等于用户选择的数字:
puts 'Enter Number'
number = gets.chomp.to_i
hash = {'Monday'=>1,'Tuesday'=>2,'Wednesday'=>3,'Thursday'=>4,'Friday'=>5,'Saturday'=>6,'Sunday'=>7}
p hash.find { |_, v| v == number }.first
通过使用 find,您可以获得与块内的表达式匹配的第一个元素为 true。
您接近工作解决方案,但每次都接受输入。接受输入的行为需要在循环之外进行。
puts "Enter Number"
hash = {"Monday" => 1, "Tuesday" => 2, "Wednesday" => 3, "Thursday" => 4, "Friday" => 5, "Saturday" => 6, "Sunday" => 7}
input = gets.to_i
hash.each do |x,y|
puts x if input == y
end
这将接受一次输入,然后迭代。您的解决方案所做的是为一周中的每一天请求一次输入。
如果初始哈希必须绝对是天作为键,您可以随时反转它 - 以便键和值相互交换位置:
puts 'Enter Number'
number = gets.chomp.to_i
hash = {'Monday'=>1,'Tuesday'=>2,'Wednesday'=>3,'Thursday'=>4,'Friday'=>5,'Saturday'=>6,'Sunday'=>7}
p hash.invert[number]
但是按 id 键会更有意义。