2015-02-23 67 views
-1

所以,我猜我的疑問很簡單。在Ruby中打印數組表

我有一個數組,我的目標是打印的代碼的方式,因此輸出以下:

Output Table

我怎樣才能做到這一點?

謝謝。

+2

...什麼呢你的數組看起來像?到目前爲止嘗試過的東西? – ptierno 2015-02-23 22:21:26

+0

爲了讓每個準備答案的讀者不必構建包含輸入數據的同一對象,請編輯以提供答案,以便他們可以複製和粘貼。例如,'arr = [{date:「2014-12-01」,來自:「Ferdous」,主題:「本週作業」},{date:「2014-12-01」,來自:「Dajana」,主題:「Keep on coding!:)」},{date:2014-12-02,來自:「麥當娜」,主題:「Re:本週作業」}]'。 – 2015-02-23 22:26:49

+1

你需要提供一些關於你的環境的更多信息(它是一個rails項目嗎?這是一個'ActiveRecord'表嗎?等等)和一些關於你的代碼的東西(例如相關類的一個例子)以及你所做的嘗試至今。 – xlembouras 2015-02-23 22:30:04

回答

2

我想有很多可以做這種寶石的,但是如果你想要滾你自己的,你可以像這樣做,在一個相當普遍的方式:

你輸入由列標籤:

col_labels = { date: "Date", from: "From", subject: "Subject" } 

和用於行中的數據:

arr = [{date: "2014-12-01", from: "Ferdous", subject: "Homework this week"}, 
     {date: "2014-12-01", from: "Dajana", subject: "Keep on coding! :)"}, 
     {date: "2014-12-02", from: "Ariane", subject: "Re: Homework this week"}] 

其中col_labelsarr的元件具有相同的密鑰。

從現在起,代碼是一般的。首先構造一個散列@columns(爲了方便起見,我已經創建了一個實例變量)。

@columns = col_labels.each_with_object({}) { |(col,label),h| 
    h[col] = { label: label, 
      width: [arr.map { |g| g[col].size }.max, label.size].max } } 
    # => {:date=> {:label=>"Date", :width=>10}, 
    #  :from=> {:label=>"From", :width=>7}, 
    #  :subject=> {:label=>"Subject", :width=>22}} 

def write_header 
    puts "| #{ @columns.map { |_,g| g[:label].ljust(g[:width]) }.join(' | ') } |" 
end 

def write_divider 
    puts "+-#{ @columns.map { |_,g| "-"*g[:width] }.join("-+-") }-+" 
end 

def write_line(h) 
    str = h.keys.map { |k| h[k].ljust(@columns[k][:width]) }.join(" | ") 
    puts "| #{str} |" 
end 

write_divider 
write_header 
write_divider 
arr.each { |h| write_line(h) } 
write_divider 

+------------+---------+------------------------+ 
| Date  | From | Subject    | 
+------------+---------+------------------------+ 
| 2014-12-01 | Ferdous | Homework this week  | 
| 2014-12-01 | Dajana | Keep on coding! :)  | 
| 2014-12-02 | Ariane | Re: Homework this week | 
+------------+---------+------------------------+ 

如果你想扭轉顯示器,使之成爲大一點,像你這樣的,首先執行:

$_!.reverse 
[email protected] += 4 

Output Table

+0

巨人的答案..你讓Postgresql DB像輸出...恭喜...... + 1 – 2015-02-24 07:02:55