使用哈希输出CSV的数据



当我有一个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] }

相关内容

  • 没有找到相关文章

最新更新