ruby 使用散列输出CSV的数据

jjjwad0x  于 2022-11-04  发布在  Ruby
关注(0)|答案(1)|浏览(166)

当我的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

2w3kk1z5

2w3kk1z51#

您的数据变量没有在循环外定义,并且有一个额外的空格。要创建哈希值的哈希值(行)。
一种选择是使用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] }

相关问题