Показать сообщение отдельно
Старый 11.01.2014, 12:07   #5  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от kgksoft Посмотреть сообщение
Всегда не хватало сортировки контейнеров в DAX.
0.
в алгоритме есть принципиальная ошибка - конейнер может содержать другие контейнеры. а также другие объекты, для которых отсутствует операция сравнения.

поэтому ваш алгоритм имеет очень ограниченное применение.
надо отдать должное функция less - прикольная.
но потенциально опасна runtime-ошибками.

1.
насколько я помню (пусть меня поправят знающие люди), контейнер - это атомарный объект в Аксапте.

другими словами, при любой попытке изменения контейнера, фактически происходит пересоздание контейнера. со всеми вытекающими последствиями.

насколько я помню, именно это и послужило причиной создания объектов-коллекций и причиной неразвития таких полезных структур как KeySum.

2.
контейнер - чисто аксаптовская структура, для которой нет аналога ни на .net., ни в SQL, ни в OLAP...
в связи с планами перевода всего и вся на .net, контейнеры будут все более более неприемлемым инструментом.

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

=================================
в связи с вышесказанным лучше:
* преобразовать контейнер в объект-коллекцию, например в set, (при преобразовании выполните проверку)
* (опционально для несортирующих коллекций) выполнить сортировку
* преобразовать объект-коллекцию обратно в контейнер.

причем в классе Global вроде уже есть функции преобразователи.
и если содержимое контейнера вам заранее известно и не требует проверки и не содержит одинаковых элементов, то лучше вместо своего алгоритма вызвать пару функций, что-то вроде
X++:
myContainer = set2con(con2set(myContainer)); // сортируем контейнер, содержащий индексы
(сейчас аксапты нет под рукой, чтобы проверить наличие именно этих функций)

Последний раз редактировалось mazzy; 11.01.2014 в 12:27.