如何在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]]
的东西。
我在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]]
的东西。