我有一系列花车
var ar = [Float]()
for (var i=0; i<900; i++) {
ar.append(Float(i))
}
如何将上面的数组转换为类型为
的结构数组struct Vec {
var x: Float
var y: Float
var z: Float
}
不迭代第一个数组?
C / C ++中的等效示例可能是这样的:
memmove(&vecBuf[0], floatBuf, 900 * sizeof(float));
答案 0 :(得分:0)
事实证明,我可以像在C中一样使用Swift中的memcpy / memmove
struct Vec {
var x: Float
var y: Float
var z: Float
}
var ar = [Float]()
for (var i=0; i<900; i++) {
ar.append(Float(i))
}
var res = [Vec](count: 300, repeatedValue:Vec(x: 0, y: 0, z: 0))
memmove(&res, ar, sizeof(Float) * ar.count)
NSLog("%f %f %f \n", res[0].x, res[0].y, res[0].z)
memmove与迭代大型浮点数组相比,转换为结构导致结果减少5秒以上(当浮点数组长度为~560.000时)。
答案 1 :(得分:0)
如果您认为memmove
是合理的,那么您可能更喜欢这种非常好的方式:
// assume ar is a [Float] variable
var mem = UnsafeMutablePointer<Float>.alloc(ar.count)
mem.initializeFrom(ar)
var mem2 = UnsafeMutablePointer<Vec>(mem)
在该版本中,我们只是从Float数组的缓冲版开始,将视为Vec数组。