2011-12-07 18 views
8

Quale sarebbe il modo più semplice per eseguire un ordinamento multiplo in AS3. Qualcosa di simile a array_multisort() in PHP ... come questo: sort a multidimentional array using array_multisortOrdinamento array multidimensionale in AS3

quello che ho

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

.. che in loop le uscite

Andorra 
United Arab Emirates 
Afghanistan 
Antigua & Barbuda 
Anguilla 

... cosa ho bisogno è di ordinare contro il secondo indice di ciascuno, quindi ottengo

Afghanistan 
Andorra 
Anguilla 
Antigua & Barbuda 
United Arab Emirates 
+3

Prova 'COUNTRIES.sortOn ('1')' Vedi http://stackoverflow.com/questions/8008806/as3-sorting-an-array-of-nested-arrays/8010254# 8010254 per i dettagli. –

+1

Inoltre: prova a leggere i documenti ([Array # sortOn()] (http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Array.html#sortOn%28%29)) – RIAstar

+0

OMG. .. Sono così zoppo. Grazie 32bitkid. Ha funzionato ... ad una risposta in modo da poter votare. – pioSko

risposta

6

E 'semplice:

COUNTRIES.sortOn("1"); 

Funziona perché è possibile accedere a un indice di array utilizzando una stringa, proprio come una proprietà: array["0"]. Quindi sortOn utilizza la "proprietà" "1" di ciascun array interno per l'ordinamento.

0

Un modo per ottenere questo sarebbe utilizzare un array di oggetti

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

È quindi possibile utilizzare il metodo Array sortOn.

0

È meglio creare un array di oggetti, invece di un array di array, quindi utilizzare 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

È possibile utilizzare il metodo 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; 
    } 
} 
Problemi correlati