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;
}
Другие вопросы по тегам