#apache-flex #actionscript #adobe #sorting
#apache-flex #actionscript #adobe #сортировка
Вопрос:
Вот строки, которые может содержать этот массив (в правильном порядке):
‘получатели’, ‘columnSelector’, ‘headerImageLink’, ‘заголовок’, ‘Основной текст’, ‘текст’, ‘Изображение тела’
Теперь, чтобы отсортировать их, я, очевидно, не хочу делать что-то подобное:
if( a == 'columnSelector' amp;amp; b == 'headerImageLink' ) return -1;
else if( a == 'columnSelector' amp;amp; b == 'title' ) return -1;
else if( a == 'columnSelector' amp;amp; b == 'mainText' ) return -1;
Итак, возникает интересная вещь. Я знаю, что вы можете оптимизировать вышеупомянутые некоторые, используя что-то вроде этого:
if( a == 'columnSelector' || a == 'bodyImage' ) return -1;
Это позволило бы получить последние два, но в последнее время я просто хотел, чтобы сообщество высказалось по проблемам, с которыми я сталкивался в прошлом. Итак, вопрос в том, какой наилучший способ написать пользовательскую сортировку, используя относительно случайный порядок (не алфавитный и т.д.)?
Спасибо!
Комментарии:
1. Я подумал, что вы могли бы сделать что-то вроде этого: var correctOrder:Array = [все, строки, в, здесь]; если (correctOrder.indexOf(a) < correctOrder.indexOf(b)) возвращает -1; и т. Д
Ответ №1:
Почему бы вам не использовать Array.sort с функцией compareFunction, которая определяет ваш пользовательский алгоритм?
Комментарии:
1. Это то, что я делаю. Я запрашиваю логику внутри функции compareFunction (о чем вам должны сообщить return -1, return 1 и т.д.)
2. @andrewpthorp Это не было очевидно для меня из исходного вопроса. Поскольку сортировка произвольна; я бы превратил вашу строку в объекты и добавил к ней числовое поле «упорядочивание». Концептуально это похоже на очередь Netflix; нет способа выбрать Netflix и определить, что вы хотите посмотреть следующим. Управлять нашей очередью зависит от нас. Я использовал тот же подход для определения порядка отображения продуктов на домашней странице Flextras в качестве другого примера.
3. Вы думаете, у меня должен быть другой тип данных, который имеет значение и вес?
4. @andrewpthorp Я верю, что это один из подходов, который сработает. Однако я редко имею дело с массивами простых значений; поэтому добавление другого поперти к объекту не имеет большого значения. Переход от строки к объекту требует немного больше работы. 🙂
5. Верно, я мог бы поступить таким образом, но как будет выглядеть логика для чего-то подобного? (Отредактируйте свой ответ с помощью логики, чтобы я мог поставить ему зеленую галочку)