Повозился. Интересно. Автору - респект за раскопки! Когда я начинал изучать классы-коллекции, то метод 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, которое, несмотря на казалось бы дозволенность трех элементов, содержит их только два.