如何在Swift 3 多维数组中获取垂直切片?

How to get a vertical Slice in a Swift 3 multi-dimensional array?

我在Swift3中有一个简单的二维数组,像这样:

let myData = [[1, 2],[3, 4]]

我希望能够得到的是一个表示垂直列的简单 Slice,因此例如对第一列进行切片会得到一个包含内容 [1, 3].[=16= 的 ArraySlice ]

我希望能够使用一些简单的语法在数组中生成切片,如下所示:

let sliceCol = myData[0...1][0]

let sliceRow = myData[0][0...1]

但是这两行代码都计算出一个切片,它只是其中一行(两种情况下的结果都是 [1, 2])。

四处搜索会得到很多 Swift 平面数组的结果,但在 Swift 中使用多维数组的例子似乎并不多。我可以简单地遍历数组并仅使用给定的列条目构建一个新数组,但我认为必须有一种有效的方法从 Swift 3.[= 中的多维数组中获取切片16=]

这不是真正的二维数组。这是一个数组数组。有时人们试图将其视为二维数组,但它确实非常不同。例如,每一行不必具有相同数量的元素。由于写时复制行为,在 Swift 中改变这些数据结构往往非常昂贵。如您所见,即使访问它也可能非常低效。 stdlib 不包含真正的多维数组。

如果您正在做的事情需要真正的二维数组,那么您将需要一个数据结构。对于小矩阵,我建议查看 GLKit,它包括 3x3 和 4x4 的浮点矩阵。您还可以查看 simd,其中包含许多矩阵类型。

如果您的需求比这更普遍,那么您真的很想构建一个自定义 Matrix 类型。有很多examples on GitHub。如果你对此很认真,你可能想要寻找维护自己的写时复制后备存储并且不在内部使用 [[T]] 的东西。