Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Сортировка многомерного массива (http://www.flasher.ru/forum/showthread.php?t=104688)

non4me 30.11.2007 02:41

Сортировка многомерного массива
 
Есть следующий многомерный массив
Код:

Ar = []
Ar[0] = {}
Ar[0]["шило"] = {}
Ar[0]["шило"].count = 10
Ar[0]["шило"].color = "red"
Ar[0]["веревка"] = {}
Ar[0]["веревка"].count = 30
Ar[0]["веревка"].color = "синяя"
Ar[0]["мыло"] = {}
Ar[0]["мыло"].count = 2
Ar[0]["мыло"].color = "белое"
//...

exp(Ar[0])        //мыло
                //веревка
                //шило


Ar[0].sort();
exp(Ar[0])        //мыло
                //веревка
                //шило
                       


Ar[0].sort(Array.DESCENDING);
exp(Ar[0])        //мыло
                //веревка
                //шило

function exp(obj:Object, full:Boolean):Void
{
       
        if(full) ASSetPropFlags(obj, null, null, 7)
        for (var i in obj){
                trace (i+' :: '+obj[i]);
        }
}

Насколько я понимаю sort в данном случае не работает sortOn тоже, поскольку по сути требуется отсортировать свойства объекта.

Если возможность как-то отсортировать данный массив так что бы выводилась последовательность: шило, мыло, верёвка?

CorC 30.11.2007 10:20

У вас 3 мерный массив, потому сорт тут врядли поможет, сами напишите свою функцию.
З.Ы.: странно что хотите вывод 10, 2, 30, а не 2, 10, 30

non4me 30.11.2007 19:41

Цитата:

Сообщение от CorC
З.Ы.: странно что хотите вывод 10, 2, 30, а не 2, 10, 30

Ну это как раз не странно. Мне требуется сортировка по строкам. В этом случае 10, 2, 30 как раз правильная последовательность.

Что касается функции то я как раз и рассчитывал что кто-то сталкивался с данной задачей и поделится опытом ее решения. :)

Как говорится одна голова хорошо, а десять голов лучше в два раза :quiet:

Котяра 30.11.2007 23:27

сортировка производится по значению а не по индексам ( а в данном случае шило мыло веревка - индексы)

CorC 01.12.2007 10:56

Цитата:

Сообщение от non4me
Как говорится одна голова хорошо, а десять голов лучше в два раза

Да все уже написано, поищите алгоритмы сортировки: пузырьком, вставками... их же куча.

alexcon314 01.12.2007 11:17

Код:

var Arr = [[],[]];
Arr[0][0] = {label:'шило', count:10,color:'red'};
Arr[0][1] = {label:'мыло', count:2,color:'blue'};
Arr[0][2] = {label:'веревка', count:30,color:'white'};
Arr[0].sortOn('count');
i=0
while(Arr[0][i]){
        trace(Arr[0][i].label);
        i++;
}

поле count играет роль индекса. в примере при сортировке его значения сортируются как строки, обратите внимание. чтобы сортировалось как числа нужно добавить опцию
Код:

Arr[0].sortOn('count', Array.NUMERIC);


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

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