Integer Array

Небольшой прототип как создавать массив. Спокойно работает в Delphi 7.

// integer array prototype
type
    TIntegerArray = record
        Capacity: Integer;
        Length: Integer;
        Items: array of Integer;
    end;
    PIntegerArray = ^TIntegerArray;
 
// Methods
    procedure Init(Arr: PIntegerArray);
    begin
        Arr^.Length := 0;
        Arr^.Capacity := 10;
        SetLength(Arr^.Items, Arr^.Capacity);
    end;
 
    procedure Add(Arr: PIntegerArray; Item: Integer);
    begin
        if Arr^.Length = Arr^.Capacity then begin
            Inc(Arr^.Capacity, Arr^.Capacity);
            SetLength(Arr^.Items, Arr^.Capacity);
        end;
        Arr^.Items[Arr^.Length] := Item;
        Inc(Arr^.Length);
    end;
 
    procedure Del(Arr: PIntegerArray; Index: Integer);
    begin
        if (Index >= Arr.Length) or (Index < 0) then begin
            raise ERangeError.Create('out of array range');
        end;
        if Index < Arr.Length - 1 then begin
            Move(Arr^.Items[Index+1], Arr^.Items[Index], (Arr^.Length-Index-1)*SizeOf(Integer));
        end;
        Dec(Arr.Length);
    end;
 
    function Get(Arr: PIntegerArray; Index: Integer): Integer;
    begin
        if (Index >= Arr.Length) or (Index < 0) then begin
            raise ERangeError.Create('out of array range');
        end;
        Result := Arr.Items[Index];
    end;
 
    function Join(Arr: PIntegerArray): String;
    var I: Integer;
    begin
        Result := '';
        if Arr^.Length > 0 then begin
            Result := IntToStr(Arr^.Items[0]);
            for I := 1 to Arr^.Length - 1 do begin
                Result := Result + ',' + IntToStr(Arr^.Items[I]);
            end;
        end;
    end;

Код как использовать массив

var Arr: TIntegerArray;
    j: Integer;
begin
    Init(@Arr);
    for j := 0 to 20 do begin
        Add(@Arr, j + 1);
    end;
    Del(@Arr, 7);
    WriteLn(Join(@Arr));
    WriteLn('Item at index 2 ' + IntToStr(Get(@Arr, 2)));
end;
  • works/programmer/delphi/intarray.txt
  • Последнее изменение: 2026/03/20 12:24
  • Eugene