Московский физико-технический институт
Опубликован: 23.12.2005 | Доступ: свободный | Студентов: 2867 / 252 | Оценка: 4.61 / 4.44 | Длительность: 27:18:00
ISBN: 978-5-9556-0051-2
Лекция 4:

Контейнеры

Сортировка с помощью собственной функции

Мы уже слегка касались возможности сортировать массив при помощи функции упорядочивания, написанной самостоятельно. Она совершенно необходима в ActionScript первой версии для правильной сортировки численных массивов. Применять ее можно и для любых других целей. Сейчас мы приведем еще один пример, по синтаксису несколько отличающийся от предыдущего. Это связано с тем, что во Флэше есть два разных способа определять функции. Подробнее вы узнаете о них в следующей лекции, а пока можете действовать в соответствии с одним из приведенных образцов. Итак, что же принимает и что возвращает функция упорядочивания? Принимает она два элемента массива - это могут быть элементы объектных или примитивных типов. Что же касается возвращаемого значения, то здесь имеется некая разноголосица. В руководстве пользователя Флэш МХ и в онлайн-документации вы прочтете, что эта функция должна возвращать 1, если вы хотите, чтобы первый аргумент в сортированном массиве стоял позже второго, -1 - если раньше, и 0 - если порядок их безразличен. На самом же деле достаточно, чтобы в первом случае выдавалось любое положительное число, а во втором - любое отрицательное. Именно поэтому в случае сортировки чисел достаточно возвращать их разность. А мы сейчас воспользуемся собственной функцией упорядочивания, чтобы правильно отсортировать массив из предыдущего примера по полю info. Вот как это делается:

a_array = [{name:"aa", info:112}, {name:"bb", info: 23},
   {name: "ba", info:1e-5}];
   
   // Это еще один способ определить функцию;
   // подробнее он будет описан позднее
function sortFunc(o1, o2){return o1.info - o2.info;}
a_array.sort(sortFunc);
for (var i=0; i<a_array.length; i++){
   trace("{" + a_array[i].name + ", " + a_array[i].info + "}");
}

На выходе получаем:

{ba, 0.00001}
{bb, 23}
{aa, 112}

Вот теперь порядок правильный!