Jump to content

Inicializar um array dinâmico: Delphi style


nunopicado
 Share

Recommended Posts

Ora, um truquezito obscuro para inicializar um array dinâmico em Delphi.

Claro que só tem interesse para inicializar arrays pequenos e com valores diferentes, mas...

type
  TMeses=Array of Integer;
var
  Meses:TMeses;
begin
  Meses:=TMeses.Create(31,28,31,30,31,30,31,31,30,31,30,31);  // Isto inicializa o array com 12 elementos iniciais, cada um com o respectivo valor, pela ordem apresentada

Note-se que, embora se esteja a usar o Constructor do tipo TMeses, isto não é uma classe, pelo que não devem usar nenhum Meses.Free; 😛

Edited by nunopicado
  • Vote 1

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Pena não funcionar com Free Pascal 🙂

Aqui fica um truque meio esquisito para contornar o problema. Desvantagem notória: temos de fazer um overload do procedimento para cada tipo de array.

program teste;
type TIntArray = array of integer;

procedure InitArray(var a : TIntArray; const B : array of integer);
var i : word;
begin
   SetLength(a, Length(B));
   for i := 0 to Length(a)-1 do
       a[i] := B[i];
end;

var lista : array of integer;
   elem : integer;
begin
   InitArray(lista, [1,3,5,7]);
   // The code never bothered me anyway xD
end.

Importante! Por alguma razão, o tipo de dados do argumento "a" deve estar definido com type pois o FPC vai dar erro caso não o façamos (vou reportar isto como um bug).

Knowledge is free!

Link to comment
Share on other sites

Então Thoga, já sabes o que fazer... 😉

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.