Массивы структуры и динамические списки
Автор :
Пётр
Высочанский
Вернуться на главную
Массивы
Массивы предназначены для объединения множества однотипных
переменных. Доступ к переменных массива осуществляется через индекс (номер
в массиве). Массив объявляется с помощью оператора
Dim.
Dim Array.l( 10 )
Вот так
объявляется массив, состоящий из 11 переменных типа
Long и имеющий имя
Array. У вас может появится вопрос, почему 11
переменных, а не десять как задано в скобках? Дело в том, что нумерация
начинается с нуля и поэтому получается что на самом деле в массиве на одну
переменную больше чем задано.
Для доступа к переменной массива, нужно в
скобках указать её индекс (номер) и прочитать либо записать информацию.
Dim Array.l(10) ; Создание массива
Array(2)=100 ; Запись в массив
x=Array(2) ; Чтение из массива
Debug x ; Отображаем число из переменной "x" в отладочном
окне
В этом примере создаётся массив с именем
Array, а затем в переменную с номером 2,
записывается число 100. После чего производится чтение из этой же переменной.
Результат помещается в переменную с именем
Х.
В полной мере
ощутить преимущество массива перед отдельными переменными можно в циклах, когда
нужно при каждом выполнении кода получать доступ к требуемой переменной.
Dim Array.l(100)
For i=1 To 100
Array(i)=i
Next
i
В этом примере создаётся массив с 101 переменной типа
Long, а затем в цикле в этот массив
записываются данные, в нашем случае число из переменной
i
Выше переведены
примеры одномерных массивов, но
при необходимости можно использовать многомерный массив. Для этого, при
объявлении нужно задать размерность много мерного массива.
Например в этом
примере создаётся 3-ёх мерный массив
Dim Array.l(10, 4, 8) ; Создание 3-ёх мерного
массива
Array(2, 1,
1)=100 ; Запись в
массив
x=Array(2, 1,
1) ; Чтение из
массива
Debug x ; Отображаем число из переменной "x" в отладочном
окне
При
необходимости, можно изменить размерность массива (количество переменных в
массиве) после того как массив был создан. Это выполняется с помощью оператора
ReDim.
Dim Array.l(10) ; Создание массива
; Здесь находится код
программы
; Вдруг выяснилось что 11 переменных это мало,
надо как минимум 21
ReDim Array(20) ; Было 11 переменных в массиве, а стало
21.
Структуры
В отличие от массива, переменные в структуре могут
иметь разный тип.
Вот пример создания структуры
Structure
Proba
x.l
y.l
Text.s
EndStructure
Операторы
Structure и EndStructure определяют
начало и конец структуры. Между ними расположены переменные структуры Первые две
переменные имеют тип Long, а последняя, тип
String. Структуре
присвоено имя Proba которое будет
использоваться при её объявлении.
Следующий пример содержит работу
со структурой
Structure Proba
x.l
y.l
Text.s
EndStructure
test.Proba ; Объявление структуры
; Запись в структуру
test\x=10
test\y=20
test\Text="Строка текста"
; Чтение из структуры и отображение данных в
отладочном окне
Debug test\x
Debug test\y
Debug test\Text
В
структурах допускаются вызовы других структур и статические (размер которых
после объявления нельзя изменить) массивы переменных. Учтите, в структуре
индексация массива начинается с нуля и чило элементов равно заданному. Другими
словами если задан массив, равный 100, то к нему можно обращаться по
индексам 0...99
Structure
Proba
x.l[100] ; Массив переменных
z.POINT ;
Объявление системной структуры с именем
POINT
EndStructure
text.Proba ; Объявление
структуры
; Запись в
структуру
For i= 0 To
99
text\x[i]=i
Next
i
text\z\x=1
text\z\y=2
; Чтение из структуры и отображение данных в
отладочном окне
Debug "Чтение из массива"
For i= 0 To
99
Debug text\x[i]
Next
i
Debug
""
Debug "Чтение из вложенной структуры
POINT"
Debug text\z\x
Debug text\z\y
Кроме того,
есть возможность добавить структуру в обычному массиву. Для этого в место типа
переменных массива указываем имя структуры.
Structure
Proba
x.l
y.l
Text.s
EndStructure
; Создание массива с прикреплённой к нему
структурой
Dim Array.Proba(2)
; Запись в структуру
массива
Array(1)\x=1
Array(1)\y=2
Array(1)\Text="Текст"
; Чтение из структуры массива и отображение
данных в отладочном окне
Debug Array(1)\x
Debug Array(1)\y
Debug Array(1)\Text
Динамически связанные списки
В динамически связанных
списках в отличие от массивов, за переменными чётко не закреплены определённые
индексы (номера, позиции). Кроме того, есть механизм, позволяющий раздвигать
переменные и вклинивать туда одну или несколько переменных или наоборот,
уничтожать несколько переменных, сдвинув остальные переменные. Всё это позволяет
динамически изменять данные в списке.
Список создаётся с помощью оператора
NewList.
Созданный
список пока пустой, т. е. не содержащий элементов. Элементы добавляются с
помощью функции AddElement. Созданный
элемент становится текущим и именно с ним будет происходить работа. Если нужно
обратится к определенному элементу, то его сначала нужно сделать текущим с
помощью функции
SelectElement. Получить номер текущего элемента можно с помощью функции
ListIndex.
Для того чтобы просмотреть содержимое всего списка, можно использовать
специальный цикл, рассчитанный только для работы со связанными списками. Этот
цикл организуется с помощью операторов ForEach и Next.
NewList MyList.l() ; Создание
списка
AddElement(MyList()) ; Добавляем
элемент
MyList()=1
AddElement(MyList()) ; Добавляем
элемент
MyList()=2
AddElement(MyList()) ; Добавляем
элемент
MyList()=3
AddElement(MyList()) ; Добавляем
элемент
MyList()=4
; В цикле просматриваем содержимое
списка
ForEach MyList()
Debug MyList()
Next
В этом примере, в
список добавляется четыре элемента. Как только элемент добавлен, он становится
текущим, с которым на данный момент можно работать. В цикле
ForEach и Next происходит
последовательная активация всех элементов, т. е. элементы последовательно
начиная с нулевого, становятся
активными.
В место типа
переменных списка, можно указать имя существующей структуры и тогда каждый
элемент списка будет содержать до такой
структуре.
Structure
Proba
x.l
y.l
Text.s
EndStructure
NewList MyList.Proba() ; Создание
списка
AddElement(MyList()) ; Добавляем
элемент
; Запись в структуру нулевого элемента
списка
MyList()\x=1
MyList()\y=2
MyList()\Text="Текст"
; Чтение из структуры нулевого элемента списка и
отображение данных в отладочном окне
Debug MyList()\x
Debug MyList()\y
Debug MyList()\Text
Материал взят с сайта
http://pure-basic.narod.ru/docs/array_struct_list.htmlВернуться на главную