我仍然在努力解决一个基本的问题,我还没有找到一个在线的答案。
我得到的CSV类数据包括名称和数量:
Foo, 1.5
Bar, 1.2
Foo, 1.1
...
并希望将其合并为具有新值的总数的唯一名称:
Foo, 2.6 #total of both Foo lines
Bar, 1.2
...
每次数据集不是很大,但任务是相当重复的。
我试图将它转换成一个散列数组,查找
uniq
名称,然后使用inject
,但不知怎么的,它变得相当复杂,无法工作。而且,在每件事上循环似乎不是理想的方法。有没有人有一个好的和容易的想法或解决方案,我失踪?(我只找到了php的“Extract value from row in csv and sum it”。)
最佳答案
首先,您可以使用Ruby的CSV库解析和转换CSV数据:
require 'csv'
csv_data = "Foo, 1.5\nBar, 1.2\nFoo, 1.1"
data_array = CSV.parse(csv_data, converters: :numeric)
#=> [["Foo", 1.5], ["Bar", 1.2], ["Foo", 1.1]]
要对值求和,我将使用散列和
each_with_object
:data_array.each_with_object(Hash.new(0)) { |(k, v), h| h[k] += v }
#=> {"Foo"=>2.6, "Bar"=>1.2}