0

次のコードは、Excel から読み込まれた列とヘッダーがオブジェクトとして保存される ruby​​ (1.8.7) の for ループを示しています (オブジェクト属性: ヘッダー = 文字列、内容 = 文字列の配列)。いくつかの列を読んでいるので、それらをオブジェクトの配列として保存したいと思います。

問題は、各ループが配列「matrix」をインクリメントし、新しいオブジェクトを正常に格納している間、マトリックス配列の以前の要素を最新のオブジェクトで上書きするように見えることです。完成した配列を反復処理すると、同じオブジェクトの x インスタンスが取得されます。

  column_count = count_columns(worksheet)
  row_count = count_rows(worksheet)

  matrix = Array.new
  #i don't think header needs to be an array in the below loop, but anyway...
  header = Array.new
  contents = Array.new

  for column in 0..column_count - 1
    header[column] = worksheet.Cells(1, column + 2).Value
    for row in 0..row_count
      contents[row] = worksheet.Cells(row + 2, column + 2).Value
    end
    matrix[column] = Worksheet_Column.new(header[column], contents)
  end


  #looping after the array was created puts the same information in each iteration
  for column in 0..matrix.length - 1
    puts "loop = #{column}"

    puts matrix[column]
  end
4

1 に答える 1

0

まあ、内容が逆に書き込める基本的な間違いはまだわかりませんが、ヘッダーではなく内容で問題が発生していることに気付いたので、この解決策は成功しました。

for column in 0..column_count - 1
  contents[column] = Array.new
  header[column] = worksheet.Cells(1, column + 2).Value
  for row in 0..row_count
    contents[column][row] = worksheet.Cells(row + 2, column + 2).Value
  end
  matrix[column] = Worksheet_Column.new(header[column], contents[column])
end
于 2013-03-01T13:51:26.517 に答える