2016-06-13 5 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 

私はCSV::Table構造を失うことなく"amount"列によって所定の位置にテーブルをソートするために強打機能が欲しいです。具体的には、結果をCSV :: Tableにして、ヘッダーにアクセスできるようにします。今、私は、私が欲しいものではない配列を取得しています。

これは特にCSV::Tableクラスの方が簡単な方法です。どんな助け?

+0

あなたが構造を失うとはどういう意味ですか引数として与えられたとき、常に配列を返します列挙モジュールからの方法ですか? – sawa

+0

良い質問です! CSV :: Tableクラスに、同じヘッダーを持つCSV:Tableを返したsort_byメソッドがあることを期待していました。これはそうではないようです - 正しい? –

答えて

1

あなたが使用することができます:それはあなたが望むものである場合

CSV::Table.new(data)はCSV :: Tableオブジェクトに配列を変換します。

sort_by

は、ブロックが

+0

ありがとうございます。 CSV :: Tableをどのように並べ替えますか?小文字のようになりますか: CSV :: Table.new(table.sort_by {| row | row [:amount]}) –

+0

はい、ソート方法は正常です。しかし、ソートされたデータをCSV :: Tableに変換するのが本当に必要なものなのか、あなた自身に尋ねる必要があります。あなたが本当にヘッダーを持っている必要があるなら、あなたはいつも並べ替えの前にそれらを得ることができます:) – sonar0007

関連する問題