如何排序您从.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"
这是明确的吗?让我知道如果它不是。
假设这个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进行排序,您将失去价格和日期字段的更细粒度。
这就是我的想法!但我不知道哈希可以做到这一点。 – Forwarding
我使用'to_h'出现错误,为什么? – Forwarding
运行'to_h'时看到什么错误? – dlachasse
我试过[this](http://*.com/questions/28942306/sort-row-of-a-csv-file-by-first-value),但是我得到一个错误:'block(2水平)在移位':第2行中的非法引用'这就是这一行:'my_csv = CSV.read'file.csv'' – Forwarding
你的日期是“日/月/年”吗? –
@CarySwoveland,我运行ruby 2.0.0,是的,他们是dd/mm/yyyy。 – Forwarding