Ruby打印出哈希数据

时间:2015-10-30 18:12:32

标签: arrays ruby

我正在开发一个数据库,其中包含学校的记录,其中键是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命令,我发现它正在向哈希添加多个条目,但是,它不会打印所有这些

任何想法?

3 个答案:

答案 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方法。我相信这在语言中很常见。