![]() |
#5 |
Moderator
|
Повозился. Интересно. Автору - респект за раскопки! Когда я начинал изучать классы-коллекции, то метод 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 Но если длина контейнера данных указана меньше необходимой, что вначале будет отобрано заданное кол-во элементов (без проверки на уникальность! просто последовательно "слева направо"!), затем будут отброшены дубликаты и наконец выполнена сортировка - см. setByInit3, которое, несмотря на казалось бы дозволенность трех элементов, содержит их только два. |
|
Теги |
container, faq, list, map, set, классы коллекций, полезное, pack, unpack |
|
|