1D I - vector (length)
2D IxJ -matrix (width x height)
3D IxJxK - quader (width x height x length)
4D IxJxKxM - quader of quaders (width x height x length x time)
...
Especially when you don't have some function like var vector:Vector.
In Action script3 you can create for example 3D vector(5x3x4) width x height x length:
like below:
var m:Array=new Array(new Array(new Array(new Array(),new Array(),new Array(),new Array(new Array(),new Array(),new Array(),new Array(new Array(),new Array(),new Array(),new Array(new Array(),new Array(),new Array())), // new Array(new Array(new Array(),new Array(),new Array(),new Array(new Array(),new Array(),new Array(),new Array(new Array(),new Array(),new Array(),new Array(new Array(),new Array(),new Array())), // new Array(new Array(new Array(),new Array(),new Array(),new Array(new Array(),new Array(),new Array(),new Array(new Array(),new Array(),new Array(),new Array(new Array(),new Array(),new Array())) // new Array(new Array(new Array(),new Array(),new Array(),new Array(new Array(),new Array(),new Array(),new Array(new Array(),new Array(),new Array(),new Array(new Array(),new Array(),new Array())) // new Array(new Array(new Array(),new Array(),new Array(),new Array(new Array(),new Array(),new Array(),new Array(new Array(),new Array(),new Array(),new Array(new Array(),new Array(),new Array())) );//even with way using brackets like
m=[[[],[],[]...] m[0][0][1]=1; trace(m[0][0][1]);its long way too. Using auto resizing vectors as Array is, isn't memory efficient. For example Array reserve 10 memory locations. If you are using 2 you have 8 empty but reserved location. If you start using 11 locations, it will be allocated another 10 memory locations. Restricting Array to fixed size we would manage memory better. But creation of 3D vector of 5x3x4 size would need initialization loops and make creation lengthy. New loop for every dimension on top of the rest. Also creation of lot of objects with "new" consume even more time and memory.
var i,j,k; var mainArray:Array=new Array(5); for(i=0; i<5 data-blogger-escaped-array="" data-blogger-escaped-fill="" data-blogger-escaped-for="" data-blogger-escaped-i="" data-blogger-escaped-j="" data-blogger-escaped-k="0;k<4;k++)" data-blogger-escaped-mainarray="" data-blogger-escaped-new="" data-blogger-escaped-pre=""> Using not typed vectors(a.k.a Array) would slow down processing even further, cos AVM need to check type of element with every access. We could use typed Vector instead of Array with defined length and fixed flag set to true but still we need to initialize with loop for every dimension.var d1:Vector.Access to element of d1[i][j][k] is very clean but it is slow. AVM access d1[i] then search of property of "j" of unnamed vector then k of unnamed vector and so on. Some processing speed could be achived accessing dimensions like:> = new Vector. >(5*3*4,true); //follows loop initialization ... var d2=d1[i]; var d3=d2[j]; var value=d3[k];VectorEx class solves all this problems. To create 3D(5x3x4) vector with integers:var vector:VectorEx=new VectorEx(int,5,3,4);VectorEx use assembler trick of making multidimensional vectors with one-dimensional vector and quick shifting index math to access other dimensions in it.trace(vector[0][1][2]);//you can use this clean way but //using getElementAt is much faster trace(vector.getElementAt(0,1,2)); vector.setElementAt(55,0,1,2);//s trace(vector.getElementAt(0,1,2));Source: Download
No comments:
Post a Comment