Remover elemento de uma array
15/07/2008
0
Boa tarde,
Estou criando uma rotina e preciso que seja feita a exclusão do elemento de uma array conforme a opção selecionada pelo usuário.
Encontrei um exemplo mas não estou conseguindo excluir o último elemento. Segue abaixo a rotina se alguém tiver uma idéia pois a sintaxe
anArray[aPosition].free;
Não fuciona, na hora de compilar exibe mensagem de erro (record, object or type class required ), estou utilizando Delphi 6.
procedure TfrmHierarquia.DeleteElement(var anArray:TArrayCustos; const aPosition:integer);
var
lg, j : integer;
begin
lg := length(anArray);
if aPosition > lg-1 then
exit
else
if aPosition = lg-1 then
begin //if is the last element
//if TSomeType is a TObject descendant don´t forget to free it
//for example anArray[aPosition].free;
Setlength(anArray, lg -1);
exit;
end;
for j := aPosition to lg-2 do//we move all elements from aPosition+1 left...
anArray[j] := anArray[j+1];//...with a position
SetLength(anArray, lg-1);//now we have one element less
//that´s all...
end;
Exemplo de utilização.
No evento click do botão
begin
DeleteElement(matriz_mo,0);
end;
Obrigado.
Airton
Estou criando uma rotina e preciso que seja feita a exclusão do elemento de uma array conforme a opção selecionada pelo usuário.
Encontrei um exemplo mas não estou conseguindo excluir o último elemento. Segue abaixo a rotina se alguém tiver uma idéia pois a sintaxe
anArray[aPosition].free;
Não fuciona, na hora de compilar exibe mensagem de erro (record, object or type class required ), estou utilizando Delphi 6.
procedure TfrmHierarquia.DeleteElement(var anArray:TArrayCustos; const aPosition:integer);
var
lg, j : integer;
begin
lg := length(anArray);
if aPosition > lg-1 then
exit
else
if aPosition = lg-1 then
begin //if is the last element
//if TSomeType is a TObject descendant don´t forget to free it
//for example anArray[aPosition].free;
Setlength(anArray, lg -1);
exit;
end;
for j := aPosition to lg-2 do//we move all elements from aPosition+1 left...
anArray[j] := anArray[j+1];//...with a position
SetLength(anArray, lg-1);//now we have one element less
//that´s all...
end;
Exemplo de utilização.
No evento click do botão
begin
DeleteElement(matriz_mo,0);
end;
Obrigado.
Airton
Airoosp
Curtir tópico
+ 0
Responder
Posts
15/07/2008
Fabianosales
Boa tarde Airton.
Se TArrayCustos for um vetor de um tipo de dados nativo, não vai funcionar mesmo, pois o método ´Free´ é declarado em TObject.
Como você não postou a declaração do tipo TArrayCusto, vou listar as funções para os dois casos (array de tipos nativos e arrays de objetos), ok?
Primeiro os tipos de dados usados.
Agora as funções:
Se TArrayCustos for um vetor de um tipo de dados nativo, não vai funcionar mesmo, pois o método ´Free´ é declarado em TObject.
Como você não postou a declaração do tipo TArrayCusto, vou listar as funções para os dois casos (array de tipos nativos e arrays de objetos), ok?
Primeiro os tipos de dados usados.
type TStringArray = array of string; //array de um tipo nativo TObjectArray = array of TObject; //array de objetos
Agora as funções:
function RemoveElement(var pArray: TStringArray; const pIndex:integer):boolean; var i :integer; begin Result := (pIndex <= High(pArray)) and (pIndex >= Low(pArray)); if not(Result) then raise EListError.Create( Format(´List index is out of bounds (¬s).´, [pIndex])) else begin for i:= pIndex to High(pArray)-1 do pArray[i] := pArray[i+1]; SetLength(pArray, Length(pArray)-1); Result := true; end; end;
function RemoveElement(var pArray: TObjectArray; const pIndex:integer):boolean; var i :integer; begin Result := (pIndex <= High(pArray)) and (pIndex >= Low(pArray)); if not(Result) then raise EListError.Create( Format(´List index is out of bounds (¬s).´, [pIndex])) else begin for i:= pIndex to High(pArray)-1 do begin if Assigned(pArray[i]) then FreeAndNil(pArray[i]); pArray[i] := pArray[i+1]; end; SetLength(pArray, Length(pArray)-1); Result := true; end; end;
Responder
Clique aqui para fazer login e interagir na Comunidade :)