Все бесплатно
    Все ссылки на файлы, расположенные на страницах сайта, добавлены пользователями и доступны для бесплатного скачивания. За содержание этих файлов администрация сайта ответственности не несет.



Вопросы
  Добавить данные в EXE файл и получить их
   Категория: Файловая система
  Функции дат в SQL
   Категория: Базы данных
  Компонент StatusBar
   Категория: Компоненты
  BDE. Динамическое создание псевдонима
   Категория: Базы данных
  Компоненты ToolBar и PageScroller
   Категория: Компоненты
  Объект экрана — Screen
   Категория: Компоненты
  Округление в меньшую сторону
   Категория: Математика
  Создание цветных строк в ListBox
   Категория: Компоненты
  К-во рабочих дней в месяце
   Категория: Математика

Delphi - Справочник: Array

ABCDEFGHIJKLMNOPQRSTUVWXYZ

  << Вернуться  

 Array
1 type Name = array[Index type|Ordinal..Ordinal {,...}] of Base type; // Статический массив

2 type Name = array of {array of ...} Base type; // Динамический массив

3 Name : array of {array of ...} const; // Открытый различный массив
Name : Array type; // Открытый динамический массив
Ключевое слово (Unit )
Тип данных содержащий индексируемую коллекцию данных
Описание:
Ключевое слово Array обеспечивает одномерные и многомерные массивы данных.

Delphi имеет три основных типа массивов :

1. Статические массивы

Они определены установленными, неизменяемыми размерами. Они могут быть одномерными или многомерными - последний является массивом массивов (массивов и т.д). Размер и диапазон такого многомерного массива всегда даются для самого высокого, крайнего левого массива - родительского массива.

Размер каждого измерения определен двумя способами, которые могут быть свободно смешаны в многомерном массиве :

Index type, где Index целое число, обычно Byte или Word. Диапазон этого типа определяет диапазон измерения. Например, Byte дает дипазон 0..255.

Ordinal..Ordinal Альтернативно, диапазон каждого измерения может быть задан предписанными порядковыми значениями, типа 22..44.

2. Динамические массивы

Динамические массивы не имеют никакой предраспределенной памяти. Определяется только когда создан указатель. Размеры таких массивов должны быть установлены прежде, чем они будут использоваться. Например :

SetLength(dynArray, 5);

устанавливает размер одномерного массива dynArray в 5 элементов. При этом будет распределена память.

Все динамические массивы начинаются с индекса = 0.

Индивидуальные подмассивы многомерного динамического массива могут иметь различные измерения - они, конечно являются отдельными массивами. После одной такой операции SetLength, на элементы набора массива уже можно ссылаться, даже при том, что остальная часть массива неопределена.

3. Открытые массивы

И статические и динамические массивы можно передать подпрограммам как параметры. Если определение параметра массива не имеет никакого диапазона (то есть, динамический тип массива), то вы должны, как это ни парадоксально передавать статический массив как параметр. Такой массив упоминается как Открытый массив. Delphi передает длину как скрытый параметр для подпрограммы.

Открытый массив также может быть определен типом значения константы. Это называют Различным (Variant) открытым массивом - это, главным образом, используется для разрешения передачи подпрограмме переменного числа значений аргументов.

Для передачи Динамического массива ссылкой, массив и подпрограммное определение массива должны быть через определение типов массива. См. код для примера.
Пример кода: Объявление и использование статических массивов

var // Определение динамического массива byteArray : Array of Byte; // Одномерный массив multiArray : Array of Array of string; // Многомерный массив i,j : Integer; begin // Установка длины одномерного массива SetLength(byteArray, 5); // Показ размера и диапазона этого массива ShowMessage('Длина byteArray = '+IntToStr(Length(byteArray))); ShowMessage('Самый маленький элемент byteArray = '+IntToStr(Low(byteArray))); ShowMessage('Самый большой элемент byteArray = '+IntToStr(High(byteArray))); // Заполнение этого массива - помните, что динамические массивы начинаются с 0 for i := 0 to 4 do byteArray[i] := i * 5; // Показ выбранных элементов массива ShowMessage('byteArray элемент 2 = '+IntToStr(byteArray[2])); ShowMessage('byteArray элемент 4 = '+IntToStr(byteArray[4])); // Установка длины 1-ого измерения многомерного массива SetLength(multiArray, 3); // Установка различной длины этих 3 подмассивов SetLength(multiArray[0], 1); SetLength(multiArray[1], 2); SetLength(multiArray[2], 3); // Установка и показ всех элементов этого массива for i := 0 to High(multiArray) do for j := 0 to High(multiArray[i]) do begin multiArray[i,j] := IntToStr(i+j); ShowMessage('multiArray['+intToStr(i)+','+intToStr(j)+'] = '+ multiArray[i,j]); end; end; // ********************** var // Определение динамического массива charArray : TCharArray; openArray : Array [0..2] of char; i : Integer; begin // Передача неопределенного массива как динамический массив подпрограмме FurnishDynamicArray(charArray); // Заполнение массива для следующей подпрограммы openArray[0] := 'N'; openArray[1] := 'o'; openArray[2] := 'w'; // Передача этого предопределенного массива как открытый массив подпрограмме ShowOpenTypeArray(openArray); // Показ всех элементов переданного массива for i := 0 to High(charArray) do ShowMessage('charArray['+intToStr(i)+'] = '+charArray[i]); // Передача подпрограмме числа символов как открытый постоянный массив ShowOpenConstArray(['H','e','l','l','o']); end; // Процедура, которая модифицирует динамический размер массива // ВАЖНО - обратите внимание, что тип массива здесь не должен быть определен - // мы должны использовать тип массива, чтобы избежать массива, // обрабатываемого как открытый массив. procedure TForm1.FurnishDynamicArray(var typeArray : TCharArray); var i : Integer; begin // Установка длины одномерного массива SetLength(typeArray, 5); // Заполнение этого массива - помните, что динамические массивы начинаются с 0 for i := 0 to 4 do typeArray[i] := Chr(Ord('A') + i); end; // Процедура, которая принимает открытый массив procedure TForm1.ShowOpenTypeArray(typeArray : Array of char); var i : Integer; begin // Показ всех элементов переданного массива for i := 0 to High(typeArray) do ShowMessage('typeArray['+intToStr(i)+'] = '+typeArray[i]); end; // Процедура, которая принимает открытый постоянный массив procedure TForm1.ShowOpenConstArray(const constArray : Array of const); var i : Integer; begin // Показ всех элементов переданного массива for i := 0 to High(constArray) do ShowMessage('constArray['+intToStr(i)+'] = '+constArray[i].VChar); end;

Результат:
typeArray[0] = N
typeArray[1] = o
typeArray[2] = w
charArray[0] = A
charArray[1] = B
charArray[2] = C
charArray[3] = D
charArray[4] = E
constArray[0] = H
constArray[1] = e
constArray[2] = l
constArray[3] = l
constArray[4] = o
Примечание:
Используйте Copy для копирования одного массива в другой. Но будьте осторожны - это копирует только первое, самое высокое измерение - новый массив будет все еще относиться к элементам подмассивов.

  << Вернуться