提高阵列访问速度

时间:2017-11-26 19:43:31

标签: arrays swift optimization

现在我正在优化我的代码,但我真的被卡住了。 我追踪了运行几个命令所需的时间,并得出结论,访问三维数组“花费”最多的时间。

array1是[Struct Data type], array2是[[[UInt8]]]

我用:

for a in 0 ..< 600 {
    for b in 0..< 900 {
        array1[counter] = Struct(s:array2[var1][var2][var3])
    }
}

我用过:

for a in 0 ..< 600 {
    for b in 0..< 900 {
         array1[counter] = Struct(s:UInt8(123))
    }
}

这给我带来了巨大的推动但却毫无用处。因此,我得出结论,访问array2需要大部分时间。 包含第一个样本的循环以0.025秒运行,第二个样本以0.005秒运行。

如何更快地访问三维数组?我试图将它变成一个1 dim数组,这会导致很多麻烦,因为它不明确使用哪个索引。 我使用已经优化的Swift 4也不是很快。 非常感谢你的帮助!

1 个答案:

答案 0 :(得分:3)

如果您想将维度a_3d[x][y][z] <-> a_1d[nY*nX*z + nX*y + x] 的3d数组表示为1d数组,请使用此转换:

3x4x5

例如a_3d[1][2][3] corresponds to a_1d[4*3*3+3*2+1] = a_1d[43] 数组:

{{1}}