如何排序您从.csv文件中排序的内容

问题描述:

如何通过ID,然后按照PRICE,然后在可能的情况下按DATE对.csv文件进行唯一排序。下面是一个例子文件:如何排序您从.csv文件中排序的内容

"Date","other","Id","other","Price" 
"01/01/2016","3","6452312546-232","a","4.5" 
"01/03/2016","1","4375623416-345","b","56.25" 
"01/03/2016","6","4375623416-345","c","0" 
"01/03/2016","5","4375623416-345","d","0" 
"02/01/2016","4","6452312546-232","e","34.21" 

我所要的输出通过ID排序第一,让一切由ID进行分组,然后一旦他们分组,按价格各组排序,然后排序现在按组中最近的日期按PRICE排序的组。所以我会得到这个作为输出:

"Date","other","Id","other","Price" 
"02/01/2016","4","6452312546-232","e","34.21" 
"01/01/2016","3","6452312546-232","a","4.5" 
"01/03/2016","1","4375623416-345","b","56.25" 
"01/03/2016","6","4375623416-345","c","0" 
"01/03/2016","5","4375623416-345","d","0" 

这是明确的吗?让我知道如果它不是。

+0

我试过[this](http://*.com/questions/28942306/sort-row-of-a-csv-file-by-first-value),但是我得到一个错误:'block(2水平)在移位':第2行中的非法引用'这就是这一行:'my_csv = CSV.read'file.csv'' – Forwarding

+0

你的日期是“日/月/年”吗? –

+0

@CarySwoveland,我运行ruby 2.0.0,是的,他们是dd/mm/yyyy。 – Forwarding

假设这个CSV文件足够小,可以安全地加载到内存中,您可以将文件读入散列并从中进行排序。

require 'csv' 

table = CSV.read('file.csv', headers: true).map { |row| Hash[row] } 
table.sort_by { |k, _| [k["id"], k["price"].to_f, Date.parse(k["date"])] } 

虽然,如果您最初按照ID进行排序,您将失去价格和日期字段的更细粒度。

+0

这就是我的想法!但我不知道哈希可以做到这一点。 – Forwarding

+0

我使用'to_h'出现错误,为什么? – Forwarding

+0

运行'to_h'时看到什么错误? – dlachasse