Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Сортировка по нескольким критериям (http://www.flasher.ru/forum/showthread.php?t=215608)

Godwarlock 09.06.2018 22:16

Сортировка по нескольким критериям
 
Привет всем. Подскажите, как отсортировать список одновременно по двум типам. Количеству и качеству. Как по одному из критериев сортировать, у меня получилось, по нескольким что-то не очень.

Код AS3:

items.sort(sort_item);
private function sort_item(a:MItem, b:MItem):int
                {
                        if (a.count > b.count)
                        {
 
                                return -1;
                        }
                        if (a.level > b.level)
                        {
                                return -1;
                        }
 
                        if (a.count < b.count)
                        {
                                return 1;
                        }
                        if (a.level < b.level)
                        {
                                return 1;
                        }
                        return 0;
                }


RedHead90 10.06.2018 12:30

Код AS3:

array.sortOn(['count', 'level'], Array.NUMERIC);

https://help.adobe.com/en_US/FlashPl....html#sortOn()

Godwarlock 11.06.2018 15:17

RedHead90 Нужно сделать сортировку конкретно для вектора, а не для array

Bletraut 11.06.2018 15:38

Цитата:

Сообщение от Godwarlock (Сообщение 1205546)
RedHead90 Нужно сделать сортировку конкретно для вектора, а не для array

Конвертируй в Array

Godwarlock 11.06.2018 17:03

Bletraut Тогда придется создавать array, потом опять его в Vector. Много лишних действий. Неужели нет способа с вектором?

Tails 11.06.2018 17:07

Код AS3:

items.sort(sort_item);
private function sort_item(a:MItem, b:MItem):int
{ 
    // Приоритет 1:
    if (a.count > b.count)
        return 1;
    if (a.count < b.count)
        return -1;
 
    // Приоритет 2:
    if (a.level > b.level)
        return 1;
    if (a.level < b.level)
        return -1;
 
    return 0;
}


RedHead90 11.06.2018 18:43

Godwarlock, если рассуждать о лишних действиях, то подумай о том, сколько раз будет вызвана функция сравнения двух элементов. Я абсолютно точно уверен, что даже с учетом того, что ты будешь конвертировать вектор в массив и обратно, нативный sortOn будет работать в разы быстрее, чем пользовательская функция. Естественно, это будет актуально для списков длиной хотя бы в 3к элементов. Если меньше, то даже запариваться не стоит и спокойно юзай метод, который привел Tails.

СлаваRa 11.06.2018 18:49

Зачем гадать? Напишите benchmark, это программирование а не философия ;)

Tails 11.06.2018 18:53

А что не так с философией?

СлаваRa 11.06.2018 18:57

Все с ней хорошо, она позволяет делать выводы основываясь на предположениях/рассуждениях без доказательств и проверки.


Часовой пояс GMT +4, время: 07:33.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.