Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Multidimensional arrays in Swift

Tags:

arrays

swift

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:

Captured from Playground

like image 605
Caroline Avatar asked Jun 05 '14 04:06

Caroline


2 Answers

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())) } 
like image 195
Rod Avatar answered Sep 22 '22 04:09

Rod


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)") 
like image 25
bbarnhart Avatar answered Sep 26 '22 04:09

bbarnhart