PDA

Просмотр полной версии : Сортировка многомерного массива


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
З.Ы.: странно что хотите вывод 10, 2, 30, а не 2, 10, 30

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

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

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

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

CorC
01.12.2007, 10:56
Как говорится одна голова хорошо, а десять голов лучше в два раза
Да все уже написано, поищите алгоритмы сортировки: пузырьком, вставками... их же куча.

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);