2016-04-24 37 views
0

我有一个散列数组,主要包含相同的值;但是,一些哈希值具有其他键值对,而其他键值对没有。例如,阵列看起来像用不同的键创建哈希数组的CSV

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

我的问题是,我试图将这个散列数组导出到CSV。我无法弄清楚如何

  1. 确保文件的头部有存在的数组中的每一个可能的键的列/键

  2. 确保值在结束了正确的列

任何帮助,将不胜感激

+0

如果属性缺失,那么默认值是什么? – Ilya

+0

我只是希望它在那种情况下对于那个值/单元是空的 – Splashlin

回答

0

你可以写这样的:

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

相关问题