Skip to content

Array management by value

All other procedures and functions written to manage the array play basically on few main points:

  • array's length (to be got or to be set);
  • array's scanning (typically through loops);
  • dereference.

Look at the code below:

procedure TForm1.deleteEmployee(id:integer);
var
  i,k,imax,deletepoint :integer;

begin
  imax:=self.findNumberOfEmployees-1;
  deletepoint:=0;

  for i:=0 to imax do
  begin
    if self.EmployeeArray[i].id = id then
    begin
      deletepoint:=i;
      if deletepoint < imax then
      begin
        for k:=deletepoint+1 to imax do
        begin
          self.EmployeeArray[k-1]:=self.EmployeeArray[k];
        end;
        SetLength(self.EmployeeArray, imax); //deletepoint = imax
      end
      else begin //deletepoint = imax
        SetLength(self.EmployeeArray, imax);
      end;
      break;
    end;
  end;

end;

The deleteEmployee procedure receives an integer, the ID of employee to "fire".

By scanning with for loop through all the array, it looks for the corresponding ID; once found, it proceeds with deletion and if it isn't the last item then move each successive item a step before, so that the forth becomes the third, and so on.

Both in case ID is the last or not, the procedure sets the new length, one less than the previous (obviously).
Notice that after moving back items, the SetLenght automatically deletes the last array item (already copied into preceding position): consequence of this is that SetLength(MyArray, 0) clears MyArray.

On the other side we have the getEmployee function, that receives the ID integer, returning a pointer to the related item.

function TForm1.getEmployee(id:integer): pEmployee;
var
  i,imax :integer;
begin
  result:=nil;
  imax:=self.findNumberOfEmployees-1;
  for i:=0 to imax do
  begin
    if self.EmployeeArray[i].id = id then
    begin
      result:= @self.EmployeeArray[i];
      break;
    end;
  end;
end;

Here is important to look at result := @self.EmployeeArray[i]; !

It returns a pointer to TEmployee!