|
|
|||||
Как отсортировать Vector
Здравствуйте. Мне нужно отсортировать, например, вектор Vector.<SomeObject> по полю prop:uint каждого элемента. То есть проверить каждый элемент вектора и узнать его prop (чем выше prop - тем выше индекс элемента). В справке нет ни одного примера как это сделать. В гугле тоже нет (только информация как сортировать вектор не стандартным sort()). Нашел простой код:
public function initTurn():void { var test:Vector.<int> = new <int>[3,5,2,3,9,0,1,8]; test.sort(compare); for (var i:uint = 0; i < test.length; i++) { trace(test[i]); } // выводит 0,1,2,3,3,5,8,9 } private function compare(x:int, y:int):Number { if (x > y) { return 1; } else if (x < y) { return -1; } else { return 0; } } Пожалуйста, подскажите код для сортировки вектора с пользовательским типом (не int, Number, uint). Или, хотя бы, подскажите что за колдовство происходит при вызове этой строчки: , может дальше как-нибудь сам разберусь.
__________________
Я мало чего умею, но зато хорошо умею учиться... |
|
|||||
общий смысл вкратце:
__________________
местонахождение |
|
|||||
Причем тут массив? Метод сортировки у Vector свой.
Описание параметров, которые он принимает: Цитата:
__________________
местонахождение |
|
|||||
СлаваRa, спасибо, теперь понял: x и y - это просто перебираемые элементы вектора . В таком случае вот как надо:
__________________
Я мало чего умею, но зато хорошо умею учиться... |
|
|||||
ну да, так и есть
__________________
местонахождение |
|
|||||
Вот я не хороший человек!!! Только сейчас увидел про функцию сравнения в справке . Читал когда-то давно и то ли не понял, то ли не дочитал. А сейчас - вместо того чтобы еще раз посмотреть - начал искать черную кошку в темной комнате, которой в этой комнате нет...
__________________
Я мало чего умею, но зато хорошо умею учиться... |
|
|||||
Modus ponens
|
Что смешно, так это то, что этот пример - бездумная копия из мануала, на самом деле не нужно возвращать строго -1, 0 или 1, достаточно просто возвращать положительное, отрицательное и 0. Т.е. функция сортировки может выглядеть так:
Да, с поправкой на то, что если вы предвидите ситуацию, когда будет переполнение, например, если отнять 1 от int.MIN_VALUE, то, возможно, есть смысл нормализовать значения, например так: Но если такие случаи не предвидятся, то это будет лишним.
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 24.02.2012 в 01:35. |
|
|||||
А это советую перепроверить. Помню, был как-то очень удивлён, что сортировка работала неправильно — оказалось надо именно -1, 0, 1, хотя в документации было сказано про положительные и отрицательные в общем.
|
|
|||||
Modus ponens
|
Я проверил - у меня работает
В конце концов, если так уж прям замуж невтерпеж, то
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 24.02.2012 в 04:20. |
|
|||||
Очень опасный вариант, при равных x и y, result будет равен 0, а всем известно что 0/0=NaN, и вот тут спасает только приведение к int, т.к. int(NaN)=0. Но все это очень опасно, я бы так не делал.
|
Часовой пояс GMT +4, время: 15:30. |
|
« Предыдущая тема | Следующая тема » |
Теги |
sorting , Vector |
|
|