【问题标题】:Loop through a hash and save to a different row循环遍历哈希并保存到不同的行
【发布时间】:2020-09-01 12:30:50
【问题描述】:

我有以下哈希

=> {"email"=>["old@email.com", "new@email.com"],
 "name"=>["some name", "stupid name"],
 "updated_at"=>[Fri, 28 Aug 2020 15:01:53 UTC +00:00, Mon, 31 Aug 2020 20:18:26 UTC +00:00]}

每个键的第一个值,例如["email"][0]old_data 和每个键的第二个值,例如["name"][1]new_data

根据上面的数据,我想创建一个带有旧数据和新数据标题以及所需结构的 CSV 文件:

Old Data                   New Data
{ email: old@email.com }   { email: new@email.com}
{ name: “some name” }      { name: "no name" }

我尝试使用以下代码:

LOG_HEADERS = ['Old Data', 'New Data'].freeze

  CSV.generate(col_sep: ';', headers: LOG_HEADERS, encoding: 'UTF-8') do |csv|
    hash.each do |v|
      old_data_value = v.map { |k, v| k + ": #{v[0]}" }
      new_data_value = v.map { |k, v| k + ": #{v[1]}" }

      csv << [old_data_value,
              new_data_value]
    end
  end
end

但是我得到了一个具有以下结构的数组:

Old Data                                     New Data
["email: old@email.com", "name: some name"]  ["email: new@email.com", "name: stupid name"]

如何将其更改为具有上述结构的哈希?

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    试试这个:

    CSV.generate(col_sep: ';', headers: LOG_HEADERS, encoding: 'UTF-8', write_headers: true) do |csv|
      hsh.each do |key,value|
        row = []
        value.each do |v|
          row << "{#{key}: #{v}}"
        end
        csv << row
      end
    end
    

    【讨论】:

      猜你喜欢
      • 2018-09-19
      • 2016-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多