数组

静态数组

静态数组声明

一维数组定义:

1
2
3
4
type
TMyArr1 = array[1..10] of integer; // integer 数组,长度为10,索引范围 1~10
TMyArr2 = array[8..10] of byte; // byte 数组,长度为3,索引范围 8~10
TMyArr3 = array[0..9] of double; // double 数组,长度为10,索引范围 0~9

二维数组定义:

1
2
3
4
type
TMyArr4 = array[1..10, 1..40] of integer;

// 此数组拥有 10 个成员,每个成员又是一个静态数组,拥有 40 个成员

n 维的静态数组的定义同理。

数组变量的定义:

1
2
3
4
5
type
TMyArr5 = array[1..8] of integer;
var
arr1: TMyArr5;
arr2: array[1..30] of Boolean;

数组变量赋值时只能按其成员逐个逐个赋值。

一些内置函数

  • Low 函数可以获取静态数组的最低索引值
  • high 函数可以获取静态数组的最高索引值
  • Length 函数可以获取静态数组的长度

例如以下求数组平均值操作:

1
2
3
4
5
6
7
8
var
I: Integer;
Total: Integer;
begin
Total := 0;
for I := Low(DayTemp1) to High(DayTemp1) do
Inc (Total, DayTemp1[I]);
Show ((Total / Length(DayTemp1)).ToString);

动态数组

动态数组声明

不指定数组的大小(索引范围),则为动态数组。

一维动态数组的声明:

1
2
type
TMyArr1 = array of integer; // integer 动态数组

二维动态数组的声明:

1
2
type
TMyArr1 = array of array of integer; // integer 动态数组的动态数组

n 维的动态数组的定义同理。

动态数组使用

动态数组在使用之前,必须使用 SetLength 函数进行设置大小:

1
2
3
4
5
6
7
8
type
TMyArr1 = array of integer; // integer 动态数组
var
arr1 : TMyArr1;

begin
SetLength(arr1, 500); // 设置大小为500
end;

SetLength 函数的调用方式如下:

1
SetLength(ARR, n1, n2, n3, ... nn);
  • ARR 为数组变量
  • n1 为第一维长度
  • n2 为第二维长度
  • nn 为第n维长度

注:

  • 动态数组的索引值是从 0 开始
  • SetLength 函数会设定所有值预先设为 0 或者类型的其他初始值
  • LowHigh, Length 函数也可以用于动态数组(SetLength之后)
  • 动态数组存在于 Heap 里面,生命周期结束后会自动释放

精简操作

数组常量可以直接赋值给动态数组(会自动分配长度),动态数组可以用 “+” 号进行连接。 ( XE7 之后的版本)

1
2
3
4
5
6
7
8
9
type
TArr = array of integer;
var
myArr1, myArr2, myArr3: TArr;
begin
myArr1 := [0, 1, 2, 3, 4, 5];
myArr2 := myArr1 + myArr1;
myArr3 := myArr1 + [9, 11];
end;