本文介绍了类型数组中的壁虎2:Float32Array级联和扩展的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有点困惑与。

我有几个的 Float32Array 的时候,那些没有的 CONCAT 的方法。我不知道有多少人都在前进,顺便说一句。
我想将它们串联所有其他Float32Array内部,但是:

What I have are several Float32Array s, that have no concat method. I don't know how many are them in advance, btw.I'd like to concatenate them all inside another Float32Array, but:


  • 正如我以前说过,没有串联方法

  • 如果我尝试写过去的数组长度,数组未展开(又名这是不行的 - 请注意,event.frameBuffer和缓冲都是Float32Array,而我不知道是什么的最终长度我缓冲区会):

var length_now = buffer.length;
for (var i = 0; i < event.frameBuffer.length; i += 1) {
      buffer [length_now + i] = event.frameBuffer[i];
}

我发现的唯一的解决方案是将Float32Array复制规则阵列,这绝对不是我想要的。你会怎么做,stackoverflowers?

The only solution I found is to copy the Float32Array in a regular array, that's definitely not what I want. How would you do, stackoverflowers?

推荐答案

键入的阵列基于 ,不能进行动态调整,所以写过去数组末尾或者使用推()是不可能的。

Typed arrays are based on array buffers, which cannot be resized dynamically, so writing past the end of the array or using push() is not possible.

一个方法来实现你想要的会分配一个新的 Float32Array ,大到足以容纳两个数组,并进行优化的复制:

One way to achieve what you want would be to allocate a new Float32Array, large enough to contain both arrays, and perform an optimized copy:

function Float32Concat(first, second)
{
    var firstLength = first.length,
        result = new Float32Array(firstLength + second.length);

    result.set(first);
    result.set(second, firstLength);

    return result;
}

这将使你写:

buffer = Float32Concat(buffer, event.frameBuffer);

这篇关于类型数组中的壁虎2:Float32Array级联和扩展的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-16 07:36