Ruby хэш и пользовательский ввод
Здравствуйте, я только что получил в рубине, и мне нужна помощь с этой задачей. Задача состоит в том, чтобы ввести 7 дней недели в хэш, например: {"Monday" => 1, "Tuesday" =>2 ..etc}. Когда пользователь вводит число от 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
3 ответа
Вы на правильном пути, просто вам нужно получить ввод от пользователя, если значения для каждого ключа являются целыми числами, то вы могли бы рассмотреть возможность использования 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]
Но было бы больше смысла вводить по идентификатору.