Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Посоветуйте. Алгоритм сортировки массива объектов по полям объекта (http://www.flasher.ru/forum/showthread.php?t=110063)

terbooter 26.03.2008 14:40

Посоветуйте. Алгоритм сортировки массива объектов по полям объекта
 
Есть массив объектов.
У объекта есть поля целочисленные.
Код:

var arr:Array = new Array();

function addElement(p1:int, p2:int, p3:int) {
    var o:Object = new Object();
    o.sortIndex1 = p1;
    o.sortIndex2 = p2;
    o.sortIndex3 = p3;
   
    arr.push(o);
}

Нужно отсортировать вначале по sortIndex1, если sortIndex1 одинаковый то сортировать по sortIndex2, если sortIndex2 одинаковый, то сортировать по sortIndex3.

etc 26.03.2008 14:56

sort + function.

Код:

var arr:Array = new Array();
function sort(a:Object, b:Object):int {
        if (a.index0 == b.index0) {
                if (a.index1 == b.index1) {
                        return a.index2 > b.index2 ? 1 : -1;
                } else {
                        return a.index1 > b.index1 ? 1 : -1;
                }
        } else {
                return a.index0 > b.index0 ? 1 : -1;
        }
        return 0;       
}
for (var i:uint = 0;i < 15;i+=1) {
        var o:Object = new Object();
        o.index0 = Math.floor(Math.random()*4);
        o.index1 = Math.floor(Math.random()*4);
        o.index2 = Math.floor(Math.random()*4);
        o.toString = function():String {
                return '['+this.index0+','+this.index1+','+this.index2+']';
        }
        arr.push(o);
}
arr.sort(sort);
trace(arr.join('\n'));

Можно упростить, если нужно.

divinus 26.03.2008 15:05

ну, на вскидку вот такой кривой вариант (возможно не сработает):
Код:

var arr:Array = new Array();

function addElement(p1:int, p2:int, p3:int) {
        var o:Object = new Object();
        o.sortIndex1 = p1;
        o.sortIndex2 = p2;
        o.sortIndex3 = p3;
        o.sortHex = p1.toString() + p2.toString() + p3.toString();
        arr.push(o);
}
for(var i:int=0; i<10; i++){
        addElement(Math.floor(Math.random()*100), Math.floor(Math.random()*100), Math.floor(Math.random()*100));
}
for(i=0; i<10; i++){
        trace(arr[i].sortIndex1+" "+arr[i].sortIndex2+" "+arr[i].sortIndex3);
}
trace("----------------------");
arr.sortOn("sortHex");
for(i=0; i<10; i++){
        trace(arr[i].sortIndex1+" "+arr[i].sortIndex2+" "+arr[i].sortIndex3);
}


terbooter 26.03.2008 15:25

спасибо

etc 26.03.2008 15:27

Забыли про sortOn (respect to BlooDHounD):

Код:

var arr:Array = new Array();
for (var i:uint = 0;i < 15;i+=1) {
        var o:Object = new Object();
        o.index0 = Math.floor(Math.random()*4);
        o.index1 = Math.floor(Math.random()*4);
        o.index2 = Math.floor(Math.random()*4);
        o.toString = function():String {
                return '['+this.index0+','+this.index1+','+this.index2+']';
        }
        arr.push(o);
}
arr.sortOn(["index0", "index1", "index2"]);
trace(arr.join('\n'));



Часовой пояс GMT +4, время: 22:49.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.