首页 > 解决方案 > 将数组值存储到 csv 列中

问题描述

我有一个需要写入 csv 的哈希,这是通过下面的代码完成的。

require 'csv'

my_array = [ {name: 'Toyota', model: 'Corolla', engine: [ 4, 6]},{name: 'Honda', model: 'Civic', engine: [ 6, 8]} ]


CSV.open("my_csv.csv", "w", headers: my_array.first.keys, :write_headers => true) do |csv|
  my_array.each do |hash|
    csv << hash.values
  end
end

如您所见,其中一个键中存储了一组值 - engine。在我的 csv 中,它如下所示。

name,model,engine
Toyota,Corolla,"[4, 6]"
Honda,Civic,"[6, 8]"

而不是engine像上述格式的列,"[4, 6]"我怎样才能4,6在保持 csv 格式的同时得到它。当必须在 csv 列中存储一组值时,典型的约定是什么?

标签: rubycsv

解决方案


在CSV 列中存储数组(和任何其他对象)没有“典型约定”。CSV 应该存储文本值。

如果要将它们放在单列中,只需加入数组:

csv << hash.values.map { |e| [*e].join(',') }

推荐阅读