¿Cómo aplanar una matriz * de esta manera * rápidamente?

Hice una pregunta similar hace un tiempo. Me preguntaba cómo puedo convertir una matriz como esta:

[[1,2,3],[4,5,6],[7,8,9]]

a esto:

[1,2,3,4,5,6,7,8,9]

Pero ahora quiero convertir esa misma matriz a esto:

[1,4,7,2,5,8,3,6,9]

Suponga que todas las submatrices tienen la misma longitud.

Si aún no lo ha notado, los primeros tres elementos del resultado son el primer elemento de las tres submatrices. El cuarto, quinto y sexto ítems en el resultado es el segundo ítem de cada subconjunto.

Si aún no comprende, quizás esto ayude:

Matriz original:

[
    [1,2,3],
    [4,5,6],
    [7,8,9]
]

Resultado:

[
    1,4,7,
    2,5,8,
    3,6,9
]

Por el momento, tengo esto:

func flatten(array: [[Int]]) -> [Int] {
    var flat = [Int]()
    for i in 0..<array[0].count {
        for subarray in array {
            flat.append(subarray[i])
        }
    }
    return flat
}

No creo que sea muy elegante. ¿Cómo puedo hacer esto de una manera rápida?

Solo para evitar ser un problema XY, he aquí por qué quiero hacer esto.

Estoy desarrollando un juego de mesa. estoy usandoHLGridNode (Básicamente son un montón de cuadrados en un diseño de cuadrícula) deHLSpriteKit como el tablero del juego de mesa. Para editar el contenido del nodo de la cuadrícula, necesito pasar una matriz 1D de nodos sprite, no una matriz 2D.

Para hacerme la vida más fácil, almacené los objetos del modelo en una matriz 2D. De esta manera, puedo referirme al cuadrado 5 cuadrados desde la izquierda y 2 cuadrados desde la parte superior simplemente haciendo:

modelObjects[5][2]

Si aplano la matriz 2D usando.flatMap { $0 } y pasar el resultado al nodo de la cuadrícula,modelObjects[5][2] parecería ser 2 cuadrados desde la izquierda y 5 cuadrados desde la parte superior.

Esto no es un duplicado deesta porque esa pregunta parece tener un número definido de matrices para trabajar. Aunque puedo poner mi matriz 2D en un bucle y hacer esoenumerate().map {...} cosas, parece un enfoque muy largo. Creo que debe haber una forma más sencilla de hacer esto con matrices 2D.

Respuestas a la pregunta(2)

Su respuesta a la pregunta