当我有一个csv文件时,它看起来像这样:
make,model,color,doors,email
dodge,charger,black,4,practice1@whatever.com
ford,focus,blue,5,practice2@whatever.com
nissan,350z,black,2,practice3@whatever.com
mazda,miata,white,2,practice4@whatever.com
honda,civid,brown,4,practice5@whatever.com
corvette,stingray,red,2,practice6@whatever.com
ford,fiesta,blue,5,practice7@whatever.com
bmw,m4,black,2,practice8@whatever.com
audi,a5,blue,2,practice9@whatever.com
subaru,brz,black,2,practice10@whatever.com
lexus,rc,black,2,practice11@whatever.com
当我试图运行我的代码时,我不断地得到这个错误,
data [:model]
^^^^
我想这不是这样的,但我想知道是否有办法让它发挥作用。我只是想让程序输出所有不同的模型。这是我的代码:
require "csv"
CSV.foreach("cars.csv", headers: true) do |row|
data = puts row.to_h
end
data [:model]
puts data
我得到我的csv文件,然后将其转换为哈希,使其等于data
您的数据变量没有在循环之外定义,并且还有一个额外的空间。创建散列(行(的散列。
一种选择是使用with_index
包含索引,并使用它来填充之前创建的空哈希:
require "csv"
data = {}
CSV.foreach("cars.csv", headers: true).with_index do |row, i|
data[i] = row.to_h
end
pp data
结果:
{0=>
{"make"=>"dodge",
"model"=>"charger",
"color"=>"black",
"doors"=>"4",
"email"=>"practice1@whatever.com"},
... ,
... ,
... ,
10=>
{"make"=>"lexus",
"model"=>"rc",
"color"=>"black",
"doors"=>"2",
"email"=>"practice11@whatever.com"}}
分组数据的另一个选项是将CSV文件读取到数组中,请参阅文档中的CSV.read
,以便能够根据请求对数据进行分组。
在阵列上,你可以做:
data.group_by { |d| d[:model] }