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

标签 arrays swift multidimensional-array slice

我在 Swift 3 中有一个简单的二维数组,如下所示:

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

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

我希望能够使用一些简单的语法来生成跨数组的 Slice,如下所示:

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

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

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

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

最佳答案

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

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

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

关于arrays - 如何在 Swift 3 多维数组中获取垂直切片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41471689/

相关文章:

c++ - 'new' 在 C++ 中是如何动态的

arrays - Scala非连续子数组

swift - 气化失败

iOS Swift window.rootViewController 与 presentViewController

ios - 预填充 Realm 数据库 swift 3.0

java - libGDX:从多维数组类获取项目的特定索引

c - 可变长度数组的原型(prototype)

c++ - 定义数组 C/C++

java - 读取维度未知的数组中的值范围

python - 如何将ndarray转换为图像并使用python显示它