Ruby哈希和用户输入

Ruby哈希和用户输入,ruby,user-input,ruby-hash,Ruby,User Input,Ruby Hash,你好,我刚刚进入ruby,我需要帮助完成这项任务。任务是在如下{“星期一”=>1,“星期二”=>2..etc}这样的散列中输入一周中的7天,当用户输入一个介于1-7之间的数字时,它会显示相应的日期。因此,如果用户按5,则输出“星期五”。到目前为止,我已经得出了以下结论: puts "Enter Number" hash = {"Monday"=>1,"Tuesday"=>2,"Wednesday"=>3,"Thursday"=>4,"Friday"=>

你好,我刚刚进入ruby,我需要帮助完成这项任务。任务是在如下{“星期一”=>1,“星期二”=>2..etc}这样的散列中输入一周中的7天,当用户输入一个介于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

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

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

这将获取一次输入,然后进行迭代。你的解决方案是在一周中的每一天都要输入一次。

< P>你的方法是正确的,你需要从用户那里得到输入,如果每个键的值是整数,那么你可以考虑使用<代码> CHOMP和<代码> toii,之后你可以使用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'
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设置键更有意义。

为了补充这一点,更为鲁比的方法是翻转散列的键和值,使其成为
hash={1=>“周一”…}
,然后简单地打印出
hash[input]
的值。