我从C API收到这个:
struct resultArray{ double *data; int size[2];};
哪里:
size =矩阵大小,一个包含行数和列数的双元素数组
data =矩阵数据
在swift中,我可以执行以下 *** 作来获取大小:
let numRows = Int(results.size.0)let numColoumns = Int(results.size.1)
但我不明白如何获得矩阵,以便我可以迭代它?我尝试了以下方法:
let matrixResult = results.data.memory
这似乎只返回一个double值,因为matrixResult变为Double.
然后我尝试了这个:
let matrixResult = results.data
这使得matrixResult成为:
UnsafeMutablePointer<Double>
我希望收到C库文档中指定的矩阵.然后我想迭代这个矩阵并从第一行获取值并将其放入Swift数组中…有人知道我在这里缺少什么吗?
解决方法 C中没有矩阵类型.假设数据是指针将连续的矩阵元素存储为数组,您将复制
第一行到Swift数组
let firstRow = Array(UnsafeBufferPointer(start: results.data,count: numColumns))
和整个“矩阵”到一个嵌套的Swift数组
let matrix = (0 ..< numRows).map { row in Array(UnsafeBufferPointer(start: results.data + numColumns * row,count: numColumns))}
或者(这类似于Melifaro suggested),您可以创建一个数组
指向矩阵行的指针:
let matrix = (0 ..< numRows).map { row in UnsafeBufferPointer(start: results.data + numColumns * row,count: numColumns)}
这仍然允许以类似矩阵的方式处理任意元素
let element = matrix[row][col]
但不会复制数据.当然这需要矩阵数据在整个矩阵的使用中有效,因为内存不受管理通过斯威夫特.
总结以上是内存溢出为你收集整理的ios – 从C api接收多维数组,如何在Swift中处理?全部内容,希望文章能够帮你解决ios – 从C api接收多维数组,如何在Swift中处理?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)