2011-12-07 14 views
8

¿Cuál sería la forma más fácil de hacer una clasificación múltiple en AS3. Algo similar a array_multisort() en PHP ... como esto: sort a multidimentional array using array_multisortordenación de matriz multidimensional en AS3

lo que he

var COUNTRIES:Array = [["AD","Andorra"],["AE","United Arab Emirates"],["AF","Afghanistan"],["AG","Antigua & Barbuda"],["AI","Anguilla"]]; 

.., que en bucle salidas

Andorra 
United Arab Emirates 
Afghanistan 
Antigua & Barbuda 
Anguilla 

... Lo que necesito es para ordenar contra el segundo índice de cada uno, entonces obtengo

Afghanistan 
Andorra 
Anguilla 
Antigua & Barbuda 
United Arab Emirates 
+3

Try 'COUNTRIES.sortOn ('1')' Ver http://stackoverflow.com/questions/8008806/as3-sorting-an-array-of-nested-arrays/8010254# 8010254 para más detalles. –

+1

También: intente leer los documentos ([Array # sortOn()] (http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Array.html#sortOn%28%29)) – RIAstar

+0

OMG. Estoy tan cojo Gracias 32bitkid. Funcionó ... y una respuesta para poder votar. – pioSko

Respuesta

6

Es muy sencillo:

COUNTRIES.sortOn("1"); 

Funciona porque se puede acceder a un índice de matriz mediante el uso de una cadena, como una propiedad: array["0"]. Por lo tanto, sortOn utiliza la 'propiedad' "1" de cada matriz interna para la clasificación.

0

Una forma de lograr esto sería usar una matriz de objetos

var countries:Array = [{abb:"AD", name:"Andorra"} //etc...]; 

A continuación, puede utilizar el método de matriz sortOn.

0

Es mejor crear una matriz de objetos en lugar de una matriz de matrices, a continuación, utilizar Array.sortOn:

var COUNTRIES : Array = 
    [ { short:"AD",long:"Andorra"}, 
     {short:"AE", long:"United Arab Emirates"}, 
     {short:"AF", long:"Afghanistan"}// and so forth 
    ]; 

COUNTRIES.sortOn ("long"); // sorts by long name 
COUNTRIES.sortOn ("short"); // sorts by short name 
0

Puede utilizar el método Array.sort().

var COUNTRIES:Array = [[AD,Andorra],[AE,United Arab Emirates],[AF,Afghanistan],[AG,Antigua & Barbuda],[AI,Anguilla]]; 

COUNTRIES = COUNTRIES.sort(sortOnName); 

function sortOnName(a:Array, b:Array):Number { 
    var aName:String = a[1]; 
    var bName:String = b[1]; 

    if(aName > bName) { 
     return 1; 
    } else if(aName < bName) { 
     return -1; 
    } else { 
     //aName == bName 
     return 0; 
    } 
} 
Cuestiones relacionadas