我仍然在努力解决一个基本的问题,我还没有找到一个在线的答案。
我得到的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}

09-05 00:01
查看更多