Edit: As Adam Washington points out, as from Beta 6, this code works as is, so the question is no longer relevant.
I am trying to create and iterate through a two dimensional array:
var array = Array(count:NumColumns, repeatedValue:Array(count:NumRows, repeatedValue:Double())) array[0][0] = 1 array[1][0] = 2 array[2][0] = 3 array[0][1] = 4 array[1][1] = 5 array[2][1] = 6 array[0][2] = 7 array[1][2] = 8 array[2][2] = 9 for column in 0...2 { for row in 0...2 { println("column: \(column) row: \(row) value:\(array[column][row])") } }
However, this is the output I get:
column: 0 row: 0 value:3.0 column: 0 row: 1 value:6.0 column: 0 row: 2 value:9.0 column: 1 row: 0 value:3.0 column: 1 row: 1 value:6.0 column: 1 row: 2 value:9.0 column: 2 row: 0 value:3.0 column: 2 row: 1 value:6.0 column: 2 row: 2 value:9.0
It looks as if the last column in the row is overwriting the other column values.
Am I declaring it wrong?
Edit: Perhaps a picture from the Playground would help:
As stated by the other answers, you are adding the same array of rows to each column. To create a multidimensional array you must use a loop
var NumColumns = 27 var NumRows = 52 var array = Array<Array<Double>>() for column in 0..NumColumns { array.append(Array(count:NumRows, repeatedValue:Double())) }
var array: Int[][] = [[1,2,3],[4,5,6],[7,8,9]] for first in array { for second in first { println("value \(second)") } }
To achieve what you're looking for you need to initialize the array to the correct template and then loop to add the row and column arrays:
var NumColumns = 27 var NumRows = 52 var array = Array<Array<Int>>() var value = 1 for column in 0..NumColumns { var columnArray = Array<Int>() for row in 0..NumRows { columnArray.append(value++) } array.append(columnArray) } println("array \(array)")
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With