Swift:将Float数组转换为结构数组

时间:2015-05-29 03:57:41

标签: arrays swift

我有一系列花车

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)); 

2 个答案:

答案 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数组。