我正在开发一个数据库,其中包含学校的记录,其中键是studentID,后跟名称,名字,姓氏,专业和目录年份。我正在使用display函数,它循环遍历已添加到哈希的用户。但是,我的代码没有打印出我添加到数据库中的所有记录。
它只打印出一个记录列表,而不是我输入的多个条目。
这是输入的示例: ----------------------------- 学生数据库记录 -----------------------------
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命令,我发现它正在向哈希添加多个条目,但是,它不会打印所有这些
任何想法?
答案 0 :(得分:2)
字符串的+
方法对右侧可能出现的内容提出了相当严格的要求。您需要明确调用to_s
:
puts key + ' : ' + store_account_data.to_s
字符串插值更宽容;它基本上为你调用to_s
:
puts "#{key} : #{store_account_data}"
或许您想要更详细的转储:
puts "#{key} : #{store_account_data.inspect}"
或没有括号:
puts "#{key} : #{store_account_data.join(', ')}"
或许store_account_data
的元素是对象,你只想打印它们的一个属性:
puts "#{key} : #{store_account_data.map(&:field_to_print).join(', '}"
答案 1 :(得分:1)
我会做类似的事情:
def display(database)
database.sDB.each do |key, account|
puts "#{key}: #{account.join(',')}"
end
end
答案 2 :(得分:0)
您可以使用ruby的join方法。我相信这在语言中很常见。