Sono un po 'confuso con Javascript Typed Arrays.Array tipizzati in Gecko 2: Concatenazione ed espansione Float32Array
Quello che ho sono diversi Float32Array s, che non hanno alcuna concat metodo. Non so quanti sono in anticipo, btw. Vorrei concatenare tutti all'interno di un altro Float32Array, ma:
- come detto prima, non esiste un metodo di concatenazione
- se provo a scrivere oltre la lunghezza della matrice, la matrice non viene espansa (aka questo non funzionerà - si ricorda che event.frameBuffer e tampone sono entrambi Float32Array e che non so quale sarà la lunghezza finale della mia buffer):
var length_now = buffer.length;
for (var i = 0; i < event.frameBuffer.length; i += 1) {
buffer [length_now + i] = event.frameBuffer[i];
}
T l'unica soluzione che ho trovato è copiare il Float32Array in un array regolare, che non è sicuramente quello che voglio. Come faresti, stackoverflowers?
Questo è davvero grande. Due domande: ricreare continuamente un nuovo array tipizzato non avrà impatto sulle prestazioni? e dove hai trovato la documentazione sul membro della funzione .set? Non è nella pagina che hai collegato. – janesconference
@janesconference, beh, non influenzerà necessariamente le prestazioni poiché 'set()' è probabilmente implementato in modo nativo e, come tale, accecantemente veloce con blit di memoria, ma avrà un impatto sulla memoria poiché non si può semplicemente estendere un array di tipi esistente . A seconda delle dimensioni dell'array, se la memoria scarseggia, si potrebbe verificare un thrashing e di conseguenza le prestazioni si ridurranno enormemente. –
@ FrédéricHamidi: Esiste un altro problema rispetto all'implementazione "nativa": si supponga di avere n array con m elementi che si desidera concatenare. La complessità è quindi O (m^2), poiché copi blocchi di dati sempre più grandi. La soluzione ottimale è ammortizzata O (m). – user877329