2015-10-30 83 views
0

我正在爲一所學校保存記錄的數據庫,其中的關鍵是studentID,後面跟着名,姓,主要和目錄年份的值。我正在處理顯示功能,該功能通過已添加到散列的用戶進行循環。但是,我的代碼並未打印出已添加到數據庫的所有記錄。紅寶石打印散列數據

它只打印出一個記錄列表,而不是我的多個輸入條目。

這是一個輸入示例: ----------------------------- 學生數據庫記錄 ---- -------------------------

1) Insert new record to database 
2) Modify record in database 
3) Remove record from database 
4) Display record(s) in database 
5) Quit 
6) Enter choice: 
1 

----------------------------- 
Add Record(s) 
----------------------------- 

Enter Student Identifcation Number: 
32424 

Enter First name of Student: 
sfsdf 

Enter Last name of Student: 
sdfsfsf 

Enter Major of Student: 
sdfsdfs 

Enter Catalogue Year: 
sdfsfds 

Your entry for Student ID 32424 has been added to the database. 

------------------------------------------------------------------------ 
32424: sfsdf, sdfsfsf, sdfsdfs, sdfsfds 
------------------------------------------------------------------------ 

這裏是我的代碼到一個數組添加到一個哈希

student_id = gets().chomp 


    if school_database.sDB.has_key?(student_id) 
     puts "Student Record Already Existent" 
     return school_database 
    end 

    puts "\nEnter First name of Student: " 
    first_name = gets().chomp 

    puts "\nEnter Last name of Student: " 
    last_name = gets().chomp 

    puts "\nEnter Major of Student: " 
    major = gets().chomp 

    puts "\nEnter Catalogue Year: " 
    catalogue_year = gets().chomp 

    puts "\nYour entry for Student ID #{student_id} has been added to the database.\n" 

    puts "\n------------------------------------------------------------------------" 
    puts "#{student_id}: #{first_name}, #{last_name}, #{major}, #{catalogue_year}" 
    puts "------------------------------------------------------------------------\n\n" 

    store_account_data = first_name + "," + last_name + "," + major + "," + catalogue_year 

    school_database.sDB[student_id] = [store_account_data] 

    return school_database 

這裏是我正在使用的代碼循環通過我的散列打印出記錄。

school_database.sDB.each do |key, store_account_data| 
puts "\n" 
puts "#{key}: #{store_account_data.join(',')}" 

積極,我運行.size命令,我發現它是增加muliple條目哈希,但是,它在不打印所有的人

任何想法的?

+1

什麼數據類型是'key'和'store_account_data'(我假設至少有一個是'Array',但是是什麼?)?你能展示例子嗎? – lurker

+0

@lurker只是數字和字母 32424:Matthew,Arnold,CIT,2015 我修改了我的帖子,向您展示了輸入是如何工作的! :) – matthewarnold

回答

0

您可以使用ruby的join方法。我相信這在語言中很常見。

1

我會做這樣的事情:

def display(database) 
    database.sDB.each do |key, account| 
    puts "#{key}: #{account.join(',')}" 
    end 
end 
+0

這是完美的!謝謝你的工作。然而,它似乎沒有列出我所有的數據庫條目,它只列出一條記錄,任何想法爲什麼它可以這樣做? @spickermann – matthewarnold

+0

你確定你的數據庫(或'database.sDB')實際上擁有更多的記錄嗎?你可以嘗試'puts database.sDB.size'或'puts database.sDB.inspect'來測試。 – spickermann

+0

好主意,我現在就試試吧!@spickermann – matthewarnold

2

字符串的+方法的地方在什麼可以在右側出現相當嚴格的要求。您需要明確地致電to_s

puts key + ' : ' + store_account_data.to_s 

字符串插值更爲寬容;它基本上是你調用to_s

puts "#{key} : #{store_account_data}" 

或者,也許你想要一個更詳細的轉儲:

puts "#{key} : #{store_account_data.inspect}" 

還是沒有括號:中store_account_data是對象

puts "#{key} : #{store_account_data.join(', ')}" 

或許元素,你只想打印其中的一個屬性:

puts "#{key} : #{store_account_data.map(&:field_to_print).join(', '}"