我有一个哈希数组,主要包含相同的值;但是,某些哈希值具有其他键值对,而其他哈希值则没有。例如,数组看起来像
example_array = [{"make" => "nissan", "model" => "altima"}, {"make" => "nissan", "model" => "maxima", "price" => "20,000"}]
我的问题是,我正在尝试将此哈希数组导出为CSV格式。我无法弄清楚如何
确保文件的标题包含数组中存在的每个可能键的列/键
确保值最终位于正确的列
非常感谢任何帮助
答案 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
。