我正在对CSV::Table
对象进行排序。我有一个包含标题的表格("date"
,"amount"
,"source"
)和O(50)
条目。
输入:
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
我想要一个bang函数来对"amount"
列的表进行排序而不会丢失CSV::Table
结构。具体来说,我希望结果是CSV :: Table,这样我仍然可以访问标题。现在,我得到一个数组,这不是我想要的。
我确信有一种更简单的方法可以做到这一点,尤其是CSV::Table
类。有什么帮助吗?
答案 0 :(得分:1)
您可以使用:
CSV::Table.new(data)
将Array转换为CSV :: Table对象,如果这是你想要的。
sort_by
是Enumerable模块中的一个方法,当块作为参数给出时,它总是返回一个数组