在ruby中巧妙地将哈希数组转换为CSV

Top*_*erH 6 ruby csv arrays

我需要在CSV文件中转换哈希数组.我发现的各种方法涉及在数组中插入哈希值:

class Array
  def to_csv(csv_filename="hash.csv")
    require 'csv'
    CSV.open(csv_filename, "wb") do |csv|
      csv << first.keys # adds the attributes name on the first line
      self.each do |hash|
        csv << hash.values
      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

不幸的是,这种方法要求数组中的每个元素都是完整的,例如当我有这个数组时,它甚至不会返回有效的csv:

myarray = [
  {foo: 1, bar: 2, baz: 3},
  {bar: 2, baz: 3},
  {foo: 2, bar: 4, baz: 9, zab: 44}
]
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方法来创建一个找到所有可能的标头的csv,并按正确的顺序分配值,在需要的地方添加空格.

hir*_*lau 11

关于什么:

class Array
  def to_csv(csv_filename="hash.csv")
    require 'csv'
    # Get all unique keys into an array:
    keys = self.flat_map(&:keys).uniq
    CSV.open(csv_filename, "wb") do |csv|
      csv << keys
      self.each do |hash|
        # fetch values at keys location, inserting null if not found.
        csv << hash.values_at(*keys)
      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)