20.03.2020, 10:35 | #1 |
Участник
|
Ax2009, Struct, Remove
Сегодня решил проверить как работают функции класса Struct.
И мягко говоря расстроился от результата работы функции Remove. Я почему-то ожидал, что эта функция работает аналогично классам Set, Map. То есть удаляет элемент. И вроде бы следующий программный код должен выводить на экране "1". X++: Struct s = new Struct(); ; s.add("01","-"); s.add("02","-"); s.add("03","-"); s.remove("02"); s.remove("03"); info(strfmt("%1", s.fields())); После remove удаляется лишь название элемента. Сам элемент вместе со своим значением остаётся в классе. К нему можно обратиться по индексу. Функция fields() становится бесполезной в таком случае.
__________________
Дмитрий |
|
|
За это сообщение автора поблагодарили: Raven Melancholic (3), Pandasama (1). |
20.03.2020, 14:24 | #2 |
Участник
|
X++: Struct s = new Struct(); ; s.add("01","1-"); s.add("02","2-"); s.add("03","3-"); info(strfmt("%1", s.toString())); s.remove("02"); s.remove("03"); info(strfmt("%1", s.fields())); info(strfmt("%1", s.toString())); info(strfmt("%1", s.valueIndex(2))); s.add("04","4-"); s.add("05","5-"); info(strfmt("%1", s.fields())); info(strfmt("%1", s.valueIndex(2))); s.add("06","6-"); info(strfmt("%1", s.fields())); s.remove("02"); s.remove("03"); s.remove("04"); s.remove("05"); info(strfmt("%1", s.fields())); info(strfmt("%1", s.toString()));
__________________
Любую техническую проблему можно решить, если есть достаточно времени и денег. |
|
20.03.2020, 15:28 | #3 |
Участник
|
Если заменить s.toString() на s.definitionString(), то видно что и с самими полями тоже все вроде бы неплохо.
Но, действительно, ориентироваться на fields() уже нельзя если нужен перебор - получим выход за пределы индекса. Хотя удаление из структуры полей немного экзотичная задача. |
|
20.03.2020, 18:43 | #4 |
Участник
|
Нет, в этом случае не будет exception.
Система по индексу покажет все удаленные элементы. Просто у них fieldName будет равен "".
__________________
Дмитрий |
|
|
|