以类似表格式输出哈希值

我需要将哈希输出到表格中。 数据有一个名为students的数组,其中包含带键"first_name""last_name""grade_level"哈希值。

这是我的代码。

 students = [] # Dummy Inputs. students = [ { "first_name" => "Bob", "last_name" => "Builder", "grade_level" => 4 }, { "first_name" => "Test", "last_name" => "Buida", "grade_level" => 3 }, { "first_name" => "Senior", "last_name" => "June", "grade_level" => 5 }, { "first_name" => "John", "last_name" => "Smith", "grade_level" => 2 }, { "first_name" => "Me", "last_name" => "Developer", "grade_level" => 11 }] ... puts "\n--------------- \n" + "| CLASS ROSTER \n" + "--------------- \n" # Felt lazy to add them individual put puts "First Name Last Name Grade Level\n" students.each do |student| puts "#{student["first_name"]} #{student["last_name"]} #{student["grade_level"]}" 

我使用tab来设置列。 有时,它会像下面一样出现故障。

样本输出

有没有办法让这更好?

人们可能应该在这里使用String#ljustString#rjust helpers。

首先,让我们准备输出:

 FIELD_SIZE = 20 roster = students.map do |s| s.values.map do |f| f.to_s.ljust(FIELD_SIZE) # 1 row end.join(' ') # join columns with spaces end.join($/) # join rows with OS-dependent CR/LF titles = ['First Name', 'Last Name', 'Grade Level'].map do |t| t.to_s.ljust(FIELD_SIZE) end.join(' | ') # join with bars 

现在你可以打印出来了:

 puts titles, roster 

这是输出:

 First Name | Last Name | Grade Level Bob Builder 4 Test Buida 3 Senior June 5 John Smith 2 Me Developer 11 

随意更改连接器和字段大小,看看它是如何工作的。