3

我试图在花药 Float32Array 的中间插入一个 Float32Array。我目前正在创建一个新的 Float32Array 并使用 3 个 for 循环将元素插入到这个新的 Float32Array 中(1 个用于插入之前,1 个用于插入新的 Float32Array,1 个用于插入之后)。

这需要很长时间。有没有更快的方法将 Float32Array 插入另一个?例如,是否有类似于

// Suppose originalArray and insertedArray are 2 Float32Arrays of
// lengths 100000 and 5000 respectively, and I want to insert 
// insertedArray into originalArray at element 50000.

var combinedArray = new Float32Array(105000);
combinedArray.set(originalArray.subarray(0, 50000));
combinedArray.subarray(50000, 55000).set(insertedArray);
combinedArray.subarray(55000, 105000).set(originalArray.subarray(50000, 100000));

目前,上述代码不起作用,因为该subarray方法没有返回与set整个Float32Array.

4

1 回答 1

2

你可以在一堆指令中做一些事情:

var combinedArray = new Float32Array(105000);
combinedArray.set(originalArray);
[].splice.apply(combinedArray, [50000, 0].concat([].slice.call(insertedArray, 0)));

不过,我真的不知道它的性能。我担心它combinedArray会以某种方式转换为Array,从而占用大量内存,并且可能占用 CPU。不应该,但我不确定。

无论如何,该set方法有第二个可选参数,即必须设置新元素的数组的偏移量。因此,您的最后两行将变为:

combinedArray.set(insertedArray, 50000);
combinedArray.set(originalArray.subarray(50000, 100000), 55000);

也许这样更有效率。

编辑:它是,根据这个测试。所以,你有你的方式。

于 2012-08-20T08:18:52.143 回答