2016-06-13 31 views
0

我在排序CSV::Table對象。我有一個表頭("date","amount","source")和O(50)條目。Ruby CSV ::表排序

輸入:

data = CSV.table('filename.csv', headers:true) # note headers are :date, :source, :amount 

amounts = [] 
data[:amount].each {|i| amounts << i.to_f} 

data.sort_by! {|row| row[:amount]} 
# error - not a defined function 

data = data.sort_by {|row| row[:amount]} 
# sorted but data is now an array not CSV::Table. would like to retain access to headers 

我希望有一個爆炸函數表由"amount"柱處沒有鬆動的CSV::Table結構進行排序。具體來說,我希望結果是一個CSV ::表,以便我仍然可以訪問標題。現在,我得到一個Array,這不是我想要的。

我敢肯定有一個更簡單的方法來做到這一點,特別是與CSV::Table類。任何幫助?

+0

你說的失去結構意味着它總是會返回一個數組? – sawa

+0

好問題!希望CSV :: Table類具有一個sort_by方法,該方法返回一個CSV:Table,並使用相同的標題。看起來情況並非如此 - 對嗎? –

回答

1

您可以使用:

CSV::Table.new(data)到數組轉換爲CSV ::表對象,如果這是你想要的。

sort_by是可枚舉模塊的方法,當塊被指定作爲參數

+0

謝謝你。你如何排序一個CSV ::表格? easiset的方式是這樣的: CSV :: Table.new(table.sort_by {| row | row [:amount]}) –

+0

是的排序方法看起來不錯。但是,您需要問自己,將已排序的數據轉換爲CSV :: Table是否真的是您需要的。如果你真的需要有標題,你可以在排序之前總是得到它們:) – sonar0007