Беларусь, рогачёв |
Контейнеры
Сортировка с помощью собственной функции
Мы уже слегка касались возможности сортировать массив при помощи функции упорядочивания, написанной самостоятельно. Она совершенно необходима в 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}
Вот теперь порядок правильный!