Добавление хеша в массив внутри double для каждого - PullRequest
0 голосов
/ 28 декабря 2018

Я читаю некоторые значения из файла .xlsx.Значения следующие: column1 = title, column2 = body, column3 = author.Я могу правильно прочитать эти значения.Однако я хочу сохранить эти значения в хэше, а каждый хэш - в массиве.

Результат, который мне нужен:

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 голосов
/ 28 декабря 2018

Зачем вам вообще нужен промежуточный хеш?

poetry_attributes << {title: title, body: body, author: author}
0 голосов
/ 28 декабря 2018

Да, вы используете только один хеш-объект.Добавление этой единственной строки должно решить вашу проблему

num_rows += 1
poetry_attributes_dict = {} # this line
poetry_attributes_dict[:title] = title
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...