0

你好,我刚刚进入 ruby​​,我需要帮助来完成这项任务。任务是在这样的哈希中输入一周中的 7 天 {"Monday" => 1 , "Tuesday" =>2 ..etc} 当用户输入 1-7 之间的数字时,它会显示相应的日期. 因此,如果用户按下 5 ,它会输出“Friday”。到目前为止,我想出了这个:

   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
4

3 回答 3

1

你的方法是对的,只需要从用户那里获取输入,如果每个键的值都是整数,那么你可以考虑使用chompand 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 您可以获得与块内表达式匹配的第一个元素为真。

于 2017-11-19T18:37:20.153 回答
0

你接近一个可行的解决方案,但你每次都接受输入。接受输入的行为需要发生在循环之外。

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

这将接受一次输入,然后进行迭代。您的解决方案所做的是在一周中的每一天要求输入一次。

于 2017-11-19T18:34:36.723 回答
0

如果初始哈希必须绝对是天作为键,您总是可以将其反转 - 以便键和值相互交换位置:

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 键会更有意义。

于 2017-11-19T23:31:08.503 回答