创建具有不同键的哈希数组的 CSV

Posted

技术标签:

【中文标题】创建具有不同键的哈希数组的 CSV【英文标题】:Create CSV of Array of Hashes with Different Keys 【发布时间】:2016-08-17 23:01:57 【问题描述】:

我有一个哈希数组,其中大部分包含相同的值;但是,一些散列具有其他键值对,而其他散列则没有。例如,数组看起来像

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

我的问题是我试图将这个哈希数组导出到 CSV 中。我不知道该怎么做

    确保文件的标题对于数组中存在的每个可能的键都有一个列/键

    确保值在正确的列中结束

任何帮助将不胜感激

【问题讨论】:

如果属性缺失,默认值呢? 在这种情况下,我只希望该值/单元格为空 【参考方案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

【讨论】:

以上是关于创建具有不同键的哈希数组的 CSV的主要内容,如果未能解决你的问题,请参考以下文章

将 csv 导入为具有 2 个键的哈希表

如何在jquery中将两个具有不同键的不同数组组合成一个数组

如何解析具有相同键的不同数据类型的改造对象的json数组

如何将数组附加为哈希值

如何使用 Swift 将具有两个不同键的两个值存储到数组或字典中? [关闭]

哈希表