使用不同的密钥创建哈希数组的CSV

时间:2016-04-24 16:04:52

标签: ruby csv hash

我有一个哈希数组,主要包含相同的值;但是,某些哈希值具有其他键值对,而其他哈希值则没有。例如,数组看起来像

example_array = [{"make" => "nissan", "model" => "altima"}, {"make" => "nissan", "model" => "maxima", "price" => "20,000"}]

我的问题是,我正在尝试将此哈希数组导出为CSV格式。我无法弄清楚如何

  1. 确保文件的标题包含数组中存在的每个可能键的列/键

  2. 确保值最终位于正确的列

  3. 非常感谢任何帮助

1 个答案:

答案 0 :(得分:1)

你可以这样写:

require 'csv'

headers = example_array.inject([]) {|res, h| h.keys | res} #all possible headers
#=> ["make", "model", "price"]
rows = example_array.map {|h| h.values_at(*headers)}
#=> [["nissan", "altima", nil], ["nissan", "maxima", "20,000"]]
CSV.generate do |csv|
  csv << headers
  rows.each do |row|
    csv << row
  end
end

如果你想在文件中写csv,只需写CSV.open("myfile.csv", "w") 而不是CSV.generate