将用户输入存储到空哈希

Posted

技术标签:

【中文标题】将用户输入存储到空哈希【英文标题】:storing user input to an empty hash 【发布时间】:2014-06-17 17:33:21 【问题描述】:

我正在编写一个基本程序。我从一个空哈希开始,并使用gets.chomp 并希望将信息存储到哈希中,以便稍后(在同一会话中)调用它。

runs = 
puts "how many miles did you run?"
miles = gets.chomp
puts "how long did it take you?"
time = gets.chomp

...程序继续

稍后我想让用户输入“评论”以将其(以及输入的任何其他内容)显示为信息:

runs.each do |miles, time|
   puts "#miles miles in #time minutes."
end

我知道我在“gets.chomp”之前/之后遗漏了一些东西。有什么建议吗?

【问题讨论】:

但是您没有在hash 中添加任何值,并且您正在尝试调用哈希......太棒了! -1 你一直隐藏在 ... 行中的内容...程序继续.. 清楚地问你问题.. 我们不会猜测.. 这就是我要问的......我不想调用空哈希。如何将这些变量“存储”在哈希中,使其不为空? 如果用户跑两次相同的距离会发生什么? 没关系,我只想要一个总列表 【参考方案1】:

要将键值对添加到哈希中,您可以使用runs[miles] = time

所以你的代码看起来像这样:

runs = 
puts "How many miles did you run?"
miles = gets.chomp
puts "How long did it take you?"
time = gets.chomp

runs[miles] = time

# When user enters `review`
runs.each do |miles, time|
    p "#miles miles in #times minutes."
end

这不是将键/值对添加到哈希的唯一方法,因此您可以查看rubydoc 中的所有可用方法。

【讨论】:

感谢@cereal 真正回答了我的问题。【参考方案2】:

在编写您的程序时,如果用户两次(不同的时间)跑了相同的距离,则只会记录 last 结果,因为散列不能存储重复的键。更好的方法是将它存储在一个元组数组中(== 具有两个值的数组):

runs = []

puts "How many miles did you run?"
miles = gets.chomp
puts "How long did it take you?"
time = gets.chomp
runs << [miles, time]

# ...    

runs.each do |miles, time|
   puts "#miles miles in #time minutes."
end

【讨论】:

【参考方案3】:
runs = Hash.new
puts "How many miles did you run?"
runs ["miles"] = gets.chomp
puts "How long did it take you?"
runs ["time"] = gets.chomp

# When user enters `review`
runs.each do |miles, time|
    p "#miles miles in #times minutes."
end

【讨论】:

以上是关于将用户输入存储到空哈希的主要内容,如果未能解决你的问题,请参考以下文章

哈希的意义何在?

如何将密码文本与 bcrypt 哈希值进行比较?

是否应该对 2FA 密码进行哈希存储?

如何将对象添加到空的用户界面文件?

有没有办法对用户在 Python 命令行中输入的文本进行哈希处理? [复制]

Ruby // 使用输入从哈希中选择和传输项目