我可以帮您进行翻译。以下是需要翻译的内容:
假设所有的子数组长度相同。
如果你还没有注意到,结果中的前三个项目是三个子数组的第一个项目。结果中的第四、五和六个项目是每个子数组的第二个项目。
如果你仍然不理解,也许这会有所帮助:
此时,我有以下内容:
如果我使用
这不是这个问题的重复,因为那个问题似乎有确定的数组数量可供使用。虽然我可以将我的2D数组放入循环中,并执行那些
我想要转置一个如下所示的二维数组:
原始数组:
[
[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
}
我认为这不是非常符合Swifty的风格。有什么方法可以用更符合Swifty的方式实现吗?
为了避免出现XY问题,我来解释一下我为什么要这样做。
我正在开发一个桌游,使用HLSpriteKit中的HLGridNode
(基本上是一个网格状布局的方块)作为游戏板。为了编辑网格节点的内容,我需要传入一个1D数组的精灵节点,而不是2D数组。
为了让我的生活更轻松,我将模型对象存储在一个2D数组中。这样,我就可以通过以下方式引用左侧5个方块和顶部2个方块所对应的方块:
modelObjects[5][2]
如果我使用
.flatMap { $0 }
来展开2D数组,并将结果传递给网格节点,modelObjects[5][2]
看起来离左边有2个正方形,离顶部有5个正方形。这不是这个问题的重复,因为那个问题似乎有确定的数组数量可供使用。虽然我可以将我的2D数组放入循环中,并执行那些
enumerate().map {...}
的操作,但这似乎是一种非常冗长的方法。我认为必须有更简单的方法来处理2D数组。