【问题标题】:Not able to iterate properly over hash in my continuous input program (Ruby)在我的连续输入程序(Ruby)中无法正确迭代哈希
【发布时间】:2015-06-08 05:10:51
【问题描述】:

我正在尝试查看是否可以在我尝试创建的程序中创建带有哈希的用户输入请求列表。解决这个问题的最佳方法是什么?

print "would you like to begin a changeover? (y/n) "
input = gets.chomp

tracking = {
  "start time" => input.Time.now,
  "Type?" => input,
  "shift?" => input,
  "standard hrs?" => input,
  "actual hrs?" => input,
  "end time" => input = gets.chomp.Time.now
}

tracking.each do |key, value|
  puts "great please answer the following: #{tracking}"
end

提前致谢!

【问题讨论】:

  • 不知道你想做什么。你能更详细地描述一下吗?您想询问用户六种不同的事情,然后将答案放入哈希中吗?
  • 您好 Amadan,感谢您的回复 我对 Ruby 比较陌生,并希望尝试从用户那里获得输入以回答哈希中的问题。我希望“问卷”的开始和结束来标记流程的开始和结束时间/日期。这可能吗?还是我应该尝试不同的方法?我觉得这样可以节省大量时间和代码。任何提示都会有所帮助。谢谢!

标签: ruby hash iteration


【解决方案1】:

您必须记住,评估是顺序的,从上到下(除非您正在定义函数/方法)。在您的代码中:

  • 您向用户询问转换问题
  • 您将用户输入(例如,y)输入到变量 input
  • 您创建了一个包含六个值的散列;其中四个将包含y,其中两个将包含当前时间
  • 您遍历哈希,打印它的值(并且什么都不问用户)。

或者至少如果gets.chomp.Time.now 不是错误的话会这样。

所以,请注意时机:

print "would you like to begin a changeover? (y/n) "
unless gets.chomp.tolower == 'n'
  puts "great please answer the following:"

  tracking = {
    "start time" => Time.now
  }

  [
    "Type?",
    "shift?",
    "standard hrs?",
    "actual hrs?"
  ].each do |question|
    print question
    tracking[question] = gets.chomp
  }

  tracking["end_time"] = Time.now
end

【讨论】:

  • 非常感谢!这让我走上了正确的轨道,但是它并没有像我希望的那样为过程的开始和结束打上时间戳,但是在玩了一下之后,我能够得到我想要的结果。代码最终看起来像这样:
【解决方案2】:

非常感谢!这让我走上了正确的道路。但是,并没有按照我想要的方式为问卷的开头和结尾加上时间戳。然而,在我自己玩了一下代码之后,我能够让它工作。

print "would you like to begin a changeover? (y/n) "
unless gets.chomp. == "n"
    puts Time.now

提出“很好,请回答以下问题:”

结束

    questionnaire = ["Type", "Shift?", "Standard hrs?", "Actual hrs?"]
    .each do |question|
        puts question
        questionnaire = gets.chomp

end

puts "请在转换完成时输入'done'" 输入=gets.chomp 放时间.now

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 2010-11-16
    相关资源
    最近更新 更多