Как сгладить массив * таким образом * быстро?

Я задал похожий вопрос некоторое время назад. Он спрашивал, как я могу превратить массив следующим образом:

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

к этому:

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

Но теперь я хочу превратить этот же массив в это:

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

Предположим, что все подмассивы имеют одинаковую длину.

Если вы еще не заметили, первые три элемента в результате - это первый элемент из трех подмассивов. Четвертый, пятый и шестой элементы в результате - это второй элемент каждого подмассива.

Если вы все еще не понимаете, возможно, это поможет:

Исходный массив:

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

Результат:

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

На данный момент у меня есть это:

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
}

Я не думаю, что это очень быстро. Как я могу сделать это быстрым способом?

Просто чтобы не быть проблемой XY, вот почему я хочу сделать это.

Я занимаюсь разработкой настольной игры. я используюHLGridNode (Это в основном набор квадратов в виде сетки)HLSpriteKit как доска настольной игры. Чтобы редактировать содержимое узла сетки, мне нужно передать одномерный массив узлов спрайтов, а не двумерный массив.

Чтобы облегчить мою жизнь, я сохранил объекты модели в двумерном массиве. Таким образом, я могу сослаться на квадрат 5 квадратов слева и 2 квадрата сверху, выполнив:

modelObjects[5][2]

Если я сгладить 2D-массив с помощью.flatMap { $0 } и передать результат в узел сетки,modelObjects[5][2] Казалось бы, 2 квадрата слева и 5 квадратов сверху.

Это не дубликатэтот потому что у этого вопроса, похоже, есть определенное количество массивов для работы. Хотя я могу поместить свой 2D-массив в цикл, и сделать этоenumerate().map {...} вещи, это похоже на действительно многословный подход. Я думаю, что должно быть проще сделать это с 2D-массивами.

Ответы на вопрос(2)

Ваш ответ на вопрос