2011-12-07 83 views
8

Cách dễ nhất để thực hiện nhiều loại trong AS3 là gì. Một cái gì đó tương tự như array_multisort() trong PHP ... như thế này: sort a multidimentional array using array_multisortSắp xếp mảng đa chiều trong AS3

Những gì tôi đã

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

.. mà looped kết quả đầu ra

Andorra 
United Arab Emirates 
Afghanistan 
Antigua & Barbuda 
Anguilla 

... những gì tôi cần là để sắp xếp nó chống lại chỉ số thứ hai của mỗi, vì vậy tôi nhận được

Afghanistan 
Andorra 
Anguilla 
Antigua & Barbuda 
United Arab Emirates 
+3

Hãy thử 'COUNTRIES.sortOn ('1') ' Xem http://stackoverflow.com/questions/8008806/as3-sorting-an-array-of-nested-arrays/8010254# 8010254 để biết chi tiết. –

+1

Ngoài ra: hãy thử đọc tài liệu ([Array # sortOn()] (http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Array.html#sortOn%28%29)) – RIAstar

+0

OMG. .. Tôi rất xấu hổ. Cảm ơn bạn 32bitkid. Nó làm việc ... quảng cáo một câu trả lời để tôi có thể bỏ phiếu. – pioSko

Trả lời

6

Rất đơn giản:

COUNTRIES.sortOn("1"); 

Nó hoạt động vì bạn có thể truy cập vào một chỉ số mảng bằng cách sử dụng một chuỗi, giống như một thuộc tính: array["0"]. Vì vậy, sortOn sử dụng thuộc tính "1" 'của mỗi mảng bên trong để sắp xếp.

0

Một cách để đạt được điều này sẽ là sử dụng một mảng đối tượng

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

Sau đó, bạn có thể sử dụng phương pháp Array sortOn.

0

Bạn tốt nhất tạo ra một mảng các đối tượng thay vì một mảng của mảng, sau đó sử dụng 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

Bạn có thể sử dụng phương thức 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; 
    } 
} 
Các vấn đề liên quan