Книга ActionScript 3.0 - Оглавление

Глава1. Основы языка
Part1. Числовые типы данных (Number, int, unit)
Part1.1. Арифметические операции, объект Math
Part2. Логический тип данных Boolean
Part3. Строковый тип данных String
Part3.1. Класс String и его методы/свойства
Part3.2. Преобразование строки в число и обратно
Part4. Работа с массивами Array
Part4.1. Методы и свойства класса Array
>> Part4.2. Сортировка массива
Part4.3. Фильтрация массива
Part5. Работа с массивами Vector
Part6. Тип данных Object
Part6.1. Класс Object и преобразования типов
Part7. Передача данных по ссылке
Part8. Неопределенные значения NaN, null и undefined
Part9.1. Оператор выбора if-else
Part9.1.1 “? :” – альтернативная конструкция if-else
Part9.2. Оператор выбора switch - case
Part10.1. Оператор цикла for и for in
Part10.2. Операторы цикла while и do
Part11. Таймеры
Книга ActionScript 3.0


Ch1.Part4.2. Сортировка массива | Книга ActionScript 3.0

Для сортировки массивов в языке ActionScript существуют два метода: sortOn и sort. Попробуем разобрать их подробно.

Сортировка с помощью метода sortOn

Допустим у нас есть массив объектов(Object), которые хранят в себе поля “name” – имена пользователей, и нам необходимо отсортировать этот массив по имени пользователей:

В результате мы получим отсортированный массив:

123 Flash Sam


Двойная сортировка

В методе sortOn мы передаем массив полей по которым необходимо отсортировать сходный массив. В данном случае мы сортируем по полю “name”. На первый взгляд может быть не понятно зачем в метод sortOn передавать массив полей, что бы лучше это понять, рассмотрим пример, когда нам необходимо отсортировать массив объектов, которые содержат имя и фамилию. В первую очередь нам необходимо отсортировать по имени, а потом по фамилии. Сделать это можно, передав в метод sortOn массив полей: ['first_name', 'last_name']:

В результате мы получим отсортированный массив:

Flash Player
Flash Press
Serious Sam

Массив сортирует элементы сперва по имени, а если будут найдены два одинаковых имени – они сортируются по фамилии.


Обратная сортировка

Если же вам необходимо отсортировать массив в обратном порядке, сделать это можно с помощью второго параметра метода sortOn:

В результате мы получим массив отсортированный в обратную сторону:

Serious Sam
Flash Press
Flash Player

В этом примере мы использовали константу массива Array.DESCENDING. Существуют и другие константы, разберем назначение каждой из них подробно.


Сортировка без учета регистра

По умолчанию Flash сортирует массив с учетом регистра. Если же вам необходимо сортировать без учета регистра, вы можете использовать константу Array.CASEINSENSITIVE:


Сортировка чисел

Рассмотрим пример сортировки когда необходимо отсортировать массив по полю, которое содержит числа(поле index):

Результат выполнения сортировки будет следующий:

Flash 10
Sam 200
Press 30

Число 200 больше чем 30, и тем не менее сортировка привела к тому что объект с индексом 200 стал выше чем с индексом 30, а должно было быть наоборот. Это происходит потому что при сравнении, Flash плеер сравнивает значения полей как строки, а строка “200″ меньше чем строка “30″, потому что первый символ строки “200″ меньше чем первый символ строки “30″. Что бы указать плееру на то что, сравнение должно происходить не по правилам строк, а по правилам чисел, в метод sortOn необходимо передать константу Array.NUMERIC:

Результат выполнения сортировки будет следующий:

Flash 10
Press 30
Sam 200

Что делать если попались два идентичных элемента?

Если вы задатие в методе sortOn, вторым параметром константу Array.UNIQUESORT, Flash прекратит сортировку и вернет значение 0:

В этом примере в окне Output мы увидим:

Сортировка не возможна, т.к. есть идентичные элементы

, т.к. у нас есть два идентичных(с точки зрения правил сортировки) элемента, у которых значения index равны 10.

Обратите внимание, что переменной res задан тип *, это означает что в этой переменной могут быть значения разных типов. В случае ошибки(как в примере выше), в этой переменной будет значение 0. В случае успешной сортировки, мы получим отсортированный массив.

Получение массива перестановок при сортировке

Как я говорил чуть выше, метод sortOn может вернуть либо значение 0, либо отсортированный массив, если использовать константу Array.UNIQUESORT. Однако, если задать константу Array.RETURNINDEXEDARRAY, то метод sortOn вернет массив индексов, которые будут показывать как были переставлены элементы в исходном массиве:

В результате мы увидим:

1,0,2
Sam 200
Flash 10
Press 30

Строка 1,0,2 означает что были переставлены местами элементы с индексами 0 и 1, а элемент с индексом 2 остался на месте.

Комбинирование констант сортировки

Мы с вами разобрали 5 констант сортировки массивов. Эти константы содержат числовые значения:

  • Array.CASEINSENSITIVE = 1
  • Array.DESCENDING = 2
  • Array.UNIQUESORT = 4
  • Array.RETURNINDEXEDARRAY = 8
  • Array.NUMERIC = 16

Как видите, значения являются элементами битовой маски(1, 2, 4, 8, 16), а это значит, что их можно комбинировать. Например если вам надо отсортировать массив по числовым значениям(Array.NUMERIC) и при этом сделать обратную сортировку(Array.DESCENDING), сделать это можно так:

Вот что мы получим:

Sam 200
Press 30
Flash 10

Сортировка с помощью метода sort

Если вам необходимо реализовать сортировку с более сложными условиями, вы можете сделать это с помощью метода sort. Первым параметром в этот метод передается ссылка на функцию, которая будет сравнивать два элемента:

Результат:

Sam
Adobe
Flash Press

В метод sort вы должны передать ссылку на функцию, которая принимает два параметра: это два объекта из исходного массива, которые необходимо сравнить. Далее в коде этой функции необходимо сделать ваши собственные проверки, и вернуть результат в виде значений -1, 0, 1:

  • -1 : это значит что первый элемент нужно поднять выше второго
  • 0 : оставить два элемента как есть, относительно друг друга
  • 1 : первый элемент нужно опустить ниже второго

У метода sort, так же как и у sortOn есть второй параметр – константа сортировки. Принцип работы констант идентичен методу sortOn. Как использоваться эти константы читайте выше.
Эту статью прочитали 2158 раз

Скачать исходные коды примеров из книги можно в облаке.
Возникли вопросы по книге? Не стесняйтесь спрашивать в комментариях или любым другим способом на странице Контакты.
Присоединяйтесь к нам в социальных сетях: ВКонтакте, Twitter и Facebook
Понравилась книга? Буду благодарен если вы поделитесь ссылкой с друзьями.



<< Предыдущий раздел | Следующий раздел >>
Книга ActionScript 3.0 - Оглавление

Глава1. Основы языка
Part1. Числовые типы данных (Number, int, unit)
Part1.1. Арифметические операции, объект Math
Part2. Логический тип данных Boolean
Part3. Строковый тип данных String
Part3.1. Класс String и его методы/свойства
Part3.2. Преобразование строки в число и обратно
Part4. Работа с массивами Array
Part4.1. Методы и свойства класса Array
>> Part4.2. Сортировка массива
Part4.3. Фильтрация массива
Part5. Работа с массивами Vector
Part6. Тип данных Object
Part6.1. Класс Object и преобразования типов
Part7. Передача данных по ссылке
Part8. Неопределенные значения NaN, null и undefined
Part9.1. Оператор выбора if-else
Part9.1.1 “? :” – альтернативная конструкция if-else
Part9.2. Оператор выбора switch - case
Part10.1. Оператор цикла for и for in
Part10.2. Операторы цикла while и do
Part11. Таймеры


Комментарии ВКонтакте:




Комментарии Facebook:




Комментарии WordPress: