次のコードは、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