AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: База знаний и проекты
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.04.2009, 10:37   #5  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Повозился. Интересно. Автору - респект за раскопки! Когда я начинал изучать классы-коллекции, то метод create выглядел очень заманчиво, но быстро понял, что это не совсем то, что хотелось (а хотелось именно при инициализации в той же строке хвост значений прописать)... Но оказывается, всё-таки, это именно ТО! Нужно было только дотумкать до структуры контейнера

Имею некоторые дополнения. В ходе возни первым делом проверил обеспечение уникальности Set. Обеспечивается! И без ругани. Если мы возьмем для Set контейнер (ту часть, которая собственно данные) вида ['Mum','washed','Mum','frame'], то после загрузки Set, как и должно, будет содержать 3 уникальных элемента в отсортированном виде: {'frame','Mum','washed'}.
X++:
static void Check_SetUnique(Args _args)
{
    Set setByInit10 = Set::create( [ 1, any2int(Types::String), 10] 
                                   + ['Mum','washed','Mum','frame']) ; 
                                   // данные не уникальны!
    Set setByInit3  = Set::create( [ 1, any2int(Types::String), 3 ] 
                                   + ['Mum','washed','Mum','frame']) ;
    ;
    info(strFmt('setByInit10 : %1', setByInit10.toString()));
    info(strFmt('setByInit10.elements = %1', setByInit10.elements()));

    info(strFmt('setByInit3  : %1', setByInit3 .toString()));
    info(strFmt('setByInit3.elements = %1', setByInit3.elements()));
}
Код:
ИНФОЛОГ:

setByInit10 : {"frame", "Mum", "washed"}
setByInit10.elements = 3
setByInit3  : {"Mum", "washed"}
setByInit3.elements = 2
Еще обратите внимание на количество элементов в заголовке. Оказывается, не нужно скрупулезно считать, сколько элементов содержится в контейнере перед инициализацией, достаточно указать какое-нибудь заведомо большее число (см. setByInit10). Это число элементов - set.elements() - после инициализации будет правильно пересчитано по факту.

Но если длина контейнера данных указана меньше необходимой, что вначале будет отобрано заданное кол-во элементов (без проверки на уникальность! просто последовательно "слева направо"!), затем будут отброшены дубликаты и наконец выполнена сортировка - см. setByInit3, которое, несмотря на казалось бы дозволенность трех элементов, содержит их только два.
Теги
container, faq, list, map, set, классы коллекций, полезное, pack, unpack

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Kashperuk Ivan: List panels in Dynaics AX - a short description of SysListPanel class Blog bot DAX Blogs 1 21.10.2007 22:51
dax-dilettante: 15. System Classes \ The Collection Classes Blog bot DAX Blogs 0 26.09.2007 23:51
casperkamal: Creating a Custom Display List - Blog bot DAX Blogs 0 27.12.2006 17:20
Инициализация map axaLearner DAX: Программирование 3 24.08.2004 15:41

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 10:47.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.