NewList
NewList name.<type>()
Описание
NewList позволяет объявить новый Связный список. Каждый элемент Связного списка распределяется динамически. Нет никаких ограничений на количество элементов, таким образом в списке может быть столько элементов, сколько необходимо. Список может быть любого допустимого Стандартного или Структурированного типа. Просмотреть все команды для управления списками можно в библиотеке List.
Новый Связный список всегда локальный, что означает, что необходимо использовать команды Global или Shared, если список, объявленный в основном коде, понадобится в процедурах. Также возможно передать связный список как параметр в Процедуру с помощью ключевого слова List .
Для быстрого обмена содержимого связного списка предусмотрена команда Swap.
Пример: Простой Связный список
NewList MyList() AddElement(MyList()) MyList() = 10 AddElement(MyList()) MyList() = 20 AddElement(MyList()) MyList() = 30 ForEach MyList() Debug MyList() Next
Пример: Связный список как параметр процедуры
NewList Test() AddElement(Test()) Test() = 1 AddElement(Test()) Test() = 2 Procedure DebugList(c, List ParameterList()) AddElement(ParameterList()) ParameterList() = 3 ForEach ParameterList() MessageRequester("List", Str(ParameterList())) Next EndProcedure DebugList(10, Test())
Пример: Структурированный Связный список
Structure Prog ; Создаём структуру для будущего Связного списка MyList(). Которая будет для него ТИПОМ. Name.s number.b EndStructure NewList MyList.Prog() ; Объявляем Связный список и привязываем структуру 'Prog'. Структура 'Prog' - это тип для Связного списка определяемый пользователем. AddElement(MyList()) ; Добавляем в него первый элемент, он становится "текущим", под индексом 0. Счёт как в массиве с 0. MyList()\name = "John"; Задаём значение текущего элемента (имени) как "John" MyList()\number = 0 ; Задаём значение текущего элемента ( Номер) как "0" *Old_Element = @mylist() ; Получаем адрес текущего (первого) элемента, который под индексом 0 For q=1 To 10 AddElement(MyList()) ; Добавляем ещё 10 элементов MyList()\name = "Ivan" ; задаём значения для остальных 10 элементов MyList()\number = q ; задаём значения для остальных 10 элементов Next q ResetList(mylist()) ; Устанавливает внутренний указатель списка на 'перед первым элементом'. While NextElement(mylist()) ; Выполняем поиск для всех элементов с именем "John" и изменяем их на "J" If mylist()\name = "John" mylist()\name = "J" EndIf Wend Debug "Адрес текущего элемента : " + Hex(@mylist()) + " под индексом " + ListIndex(MyList()) ; текущий элемент с индексом 10 ChangeCurrentElement(mylist(), *Old_Element) ; Изменяем текущий элемент, на тот который был текущим до поиска. Debug "Адрес текущего элемента : " + Hex(@mylist()) + " под индексом " + ListIndex(MyList()) ; текущий элемент с индексом 0 Debug "Имя: " + mylist()\name + " Номер: " + MyList()\number ; выводит элемент с изменёнными данными "John" на "J"