jup*_*ppy 6 c arrays ios swift
我在Swift应用程序中使用了C库,但无法弄清楚如何获取C方法应该返回的多维数组。
我从C API收到此消息:
struct resultArray
{
double *data;
int size[2];
};
Run Code Online (Sandbox Code Playgroud)
哪里:
size =矩阵大小,一个包含行数和列数的两个元素的数组
数据=矩阵数据
我可以迅速进行以下操作以获取大小:
let numRows = Int(results.size.0)
let numColoumns = Int(results.size.1)
Run Code Online (Sandbox Code Playgroud)
但是我不知道如何获得矩阵以便可以迭代它?我尝试了以下方法:
let matrixResult = results.data.memory
Run Code Online (Sandbox Code Playgroud)
这似乎只返回一个double值,因为matrixResult变为Double。
然后我尝试了这个:
let matrixResult = results.data
Run Code Online (Sandbox Code Playgroud)
这使得matrixResult为:
UnsafeMutablePointer<Double>
Run Code Online (Sandbox Code Playgroud)
我希望收到C库文档中指定的矩阵。然后我想遍历此矩阵并从第一行获取值并将其放入Swift数组中。有人知道我在这里缺少什么吗?
C 中没有矩阵data类型。假设这是一个指向存储为数组的连续矩阵元素的指针,您可以使用以下命令将第一行复制到 Swift 数组
let firstRow = Array(UnsafeBufferPointer(start: results.data, count: numColumns))
Run Code Online (Sandbox Code Playgroud)
以及整个“矩阵”到一个嵌套的 Swift 数组
let matrix = (0 ..< numRows).map { row in
Array(UnsafeBufferPointer(start: results.data + numColumns * row, count: numColumns))
}
Run Code Online (Sandbox Code Playgroud)
或者(这与Melifaro 建议的类似),您可以创建一个指向矩阵行的指针数组:
let matrix = (0 ..< numRows).map { row in
UnsafeBufferPointer(start: results.data + numColumns * row, count: numColumns)
}
Run Code Online (Sandbox Code Playgroud)
这仍然允许以类似矩阵的方式寻址任意元素
let element = matrix[row][col]
Run Code Online (Sandbox Code Playgroud)
但不复制数据。当然,这要求矩阵数据在整个使用过程中都有效matrix,因为内存不是由 Swift 管理的。
| 归档时间: |
|
| 查看次数: |
194 次 |
| 最近记录: |