2013-10-15 37 views
-1

我试图创建一个已注册事件的成员数组,但不是创建一个多个哈希数组,而是只存储最后一个要注册的成员哈希。我似乎无法弄清楚为什么。将多个数组追加到ruby中的散列

total = 0 
def registration 
    members = [] 
    event = {} 
    puts "First Name: ";   members << gets.chomp 
    puts "Last Name: ";    members << gets.chomp 
    puts "Date of Birth: ";   members << gets.chomp 
    puts "Number of Events(1-4): "; members << gets.chomp.to_i 
    total = '%.2f' % [(members[3] * 35.00)] 
    puts "TOTAL DUE: $#{total}" 
    event = { 
    :first_name => members[0], 
    :last_name => members[1], 
    :dob => members[2], 
    :events => members[3], 
    :paid => total 
    } 
    puts "Would you like to register another student?" 
    answer = gets.chomp.downcase 
    if answer == "yes" 
    registration 
    elsif answer == "no" 
    puts "Thank you for registering. We look forward to seeing you at the event." 
    p event 
    else 
    puts "Please enter 'yes' or 'no'." 
    end 
end 
registration 

回答

1

在这里,这没错:

event = {:first_name => members[0], 
     :last_name => members[1], 
     :dob => members[2], 
     :events => members[3], 
     :paid => total} 

会在每次迭代时重新分配的哈希值。

您想要做的是将新的键/值对添加到散列中。您需要确定您要使用的密钥(可能是会员全名?):

event[:member_name] => {...} 
+0

感谢您的回答,但是您的意思是将'event [:member_name]'设置为'event'散列中的一个键吗?即'event = {event [:member_name] => members [0],等等...'? – TomK

0

问题在上面提示。在你的评论中,你指出你正在尝试'创建一个散列数组',但是你的代码中没有任何东西把'事件'散列放入一个数组中。您只需构建“事件”,然后在每次运行代码时覆盖它。推测其结果是总是返回一个散列与最后一次注册。