24

ハッシュの配列を .csv ファイルに変換するにはどうすればよいですか?

私が試してみました

    CSV.open("data.csv", "wb") do |csv|
      @data.to_csv
    end

しかし、それは空白です

4

5 に答える 5

56

これを試して:

CSV.open("data.csv", "wb") do |csv|
  @data.each do |hash|
    csv << hash.values
  end
end

CSV の最初の行にハッシュのキー (ヘッダー行) を含めたい場合は、次のようにします。

CSV.open("data.csv", "wb") do |csv|
  csv << @data.first.keys # adds the attributes name on the first line
  @data.each do |hash|
    csv << hash.values
  end
end

以下の @cgenco のコメントを読んでください: 彼は Array クラスのモンキー パッチを書きました。

于 2013-06-26T16:40:35.660 に答える
2

キーがすべての行で同じでない場合、現在の回答は失敗します。これが最も安全な方法です。

data = [{a: 1, b: 2}, {b: 3, c: 4}]

CSV.open("data.csv", "w") { |csv|
  headers = data.flat_map(&:keys).uniq
  csv << headers
  data.each { |row|
    csv << row.values_at(*headers)
  }
}

最初の行に表示されない場合でも、すべてのキーが CSV に存在します。

a b c
1 2
3 4
于 2021-03-03T13:37:41.020 に答える