如何有效地将Float32Array插入Float32Array?

时间:2012-08-20 06:53:38

标签: javascript

我正在尝试在花药Float32Array的中间插入一个Float32Array。我正在创建一个新的Float32Array并使用3 for循环将元素插入到这个新的Float32Array中(插入前为1,插入新Float32Array为1,插入后为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方法的值。

1 个答案:

答案 0 :(得分:2)

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

var combinedArray = new Float32Array(105000);
combinedArray.set(originalArray);
[].splice.apply(combinedArray, [50000, 0].concat([].slice.call(insertedArray, 0)));
但是,我并不知道它的表现。我担心combinedArray会以某种方式转换为Array,从而占用大量内存并占用CPU。它不应该,但我不确定。

无论如何,set方法有一个second optional argument,即数组的偏移量,必须设置新元素。所以,你的最后两行将成为:

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

也许这更有效率。

修改:根据this test,它是。所以,你有自己的方式。