Я задал подобный вопрос некоторое время назад. Она спрашивает, как я могу превратить массив так:Как сгладить массив * таким образом * быстро?
[[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,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
}
Я не думаю, что это очень swfity. Как я могу сделать это осторожно?
Чтобы избежать проблем с XY, вот почему я хочу это сделать.
Я разрабатываю настольную игру. Я использую HLGridNode
(Это в основном куча квадратов в виде сетки) от HLSpriteKit доски настольной игры. Чтобы отредактировать содержимое узла сетки, мне нужно передать в 1D массив узлов спрайтов, а не 2D-массив.
Чтобы облегчить мою жизнь, я сохранил объекты модели в 2D-массиве. Таким образом, я могу сослаться на Sqaure 5 квадратов слева и 2 квадрата с вершины просто делать:
modelObjects[5][2]
Если я придавить 2D массив, используя .flatMap { $0 }
и передать результат в узел сетки, modelObjects[5][2]
бы кажутся 2 квадратами слева и 5 квадратами сверху.
Это не дубликат this, потому что у этого вопроса есть определенное количество массивов для работы. Хотя я могу поместить свой 2D-массив в цикл и сделать эти вещи enumerate().map {...}
, это похоже на очень длинный подход. Я думаю, что должно быть проще сделать это с помощью 2D-массивов.
Возможный дубликат [Объединение нескольких массивов в один, индексирование последовательно] (http://stackoverflow.com/questions/39696381/combining-multiple-arrays-into-one-indexing-sequential) – Hamish
«Я разрабатываю настольную игру. " Это проблема, которую вы пытаетесь решить. Вы уже решили проблему с массивом. Больше времени, потраченное на это, является отвлечением от вашей реальной цели. Это не значит, что проблема не интересна. Это просто не важно решить. –
Re your edit: от быстрого просмотра «дублирующего кандидата» мне кажется, что у него есть ответы, которые * не * предполагают определенное количество массивов для работы. –