将哈希添加到每个内部double的数组中

时间:2018-12-28 12:01:43

标签: ruby

我正在从.xlsx文件读取一些值。 值是:column1 =标题,column2 =正文,column3 =作者。 我能够正确读取这些值。 但是,我想将这些值存储在哈希中,并将每个哈希存储在数组中。

我想要的结果:

poetry_attributes = [
  {
    title: 'title1',
    author: 'author1',
    body: 'body1',
  },
  {
    title: 'title2',
    author: 'author2',
    body:  'body2',
  }, ....
 ]

但是我不明白。

我的代码是:

poetry_attributes = []
poetry_attributes_dict = {
    title:         'Title of the poetry',
    body:          'The body of the author',
    author:      'Author of the poetry',
 }

workbook = SimpleXlsxReader.open './db/basic.xlsx'
worksheets = workbook.sheets
worksheets.each do |worksheet|
  num_rows = 0
  worksheet.rows.each do |row|
    row_cells = row
    title = row[0]
    body = row[1]
    author = row[2]
    num_rows += 1
    poetry_attributes_dict[:title] = title
    poetry_attributes_dict[:body] = body
    poetry_attributes_dict[:author] = author
    poetry_attributes << poetry_attributes_dict
 end

end

puts poetry_attributes

我想我以某种方式覆盖了哈希,因为数组内部仅保存了最后一个哈希。

2 个答案:

答案 0 :(得分:4)

为什么您完全需要中间哈希?

poetry_attributes << {title: title, body: body, author: author}

答案 1 :(得分:2)

是的,您仅使用一个哈希对象。添加这一行可以解决您的问题

num_rows += 1
poetry_attributes_dict = {} # this line
poetry_attributes_dict[:title] = title