Actionscript 3.0 - Сортировать массив экземпляров по их свойствам?
У меня есть массив, в котором есть экземпляры классов. Эти экземпляры классов имеют несколько свойств. Допустим, я хочу отсортировать этот массив по свойству name каждого экземпляра.
public class Thing
{
public var name:String;
public function Thing(name:String)
{
this.name = name;
}
}
А вот как может выглядеть массив:
var ar:Array = new Array(new Thing("Apple"), new Thing("Compass"),
new Thing("Banana"), new Thing("Alligator"));
После сортировки и циклического обхода, чтобы отследить свойство имени каждого экземпляра, он должен вывести следующее: Alligator, Apple, Banana, Compass
2 ответа
Вы могли бы сортировать по
ar.sortOn(свойство, параметры);
в вашем случае свойство будет "имя", а параметр будет ARRAY.ASCENDING
PS: я не пробовал, но попробуйте: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Array.html
sortOn
должно сработать, или вы можете передать его через свою собственную функцию сортировки:
private function _sortArray( a:Thing, b:Thing ):int
{
if ( a.name < b.name )
return -1; // a goes before b
else if ( a.name > b.name )
return 1; // b goes before a
return 0; // order doesn't matter
}
Затем вы можете позвонить через:
ar.sort( _sortArray );
Функции сортировки принимают два параметра типа, хранящегося в массиве (в вашем случае Thing
) и вернуть либо <= -1
если a
должен идти раньше b
, >= 1
если b
должен идти раньше a
, или же 0
если порядок не имеет значения (т.е. имена совпадают). Вы можете сравнить практически все, чтобы получить сортировку, которую вы хотите. Например, чтобы получить случайную сортировку:
private function _sortArray( a:Thing, b:Thing ):int
{
if ( Math.random() < 0.5 )
return -1;
return 1;
}