より高速な方法は、メモリの再割り当てを何度も回避することです。
function generate(cantidad: integer): string;
const
letras_mi = 'abcdefghijklmnopqrstuvwxyz';
numeros = '0123456789';
begin
SetLength(Result, 3); // only alloc memory once
Result[1] := letras_mi[Random(Length(letras_mi)) + 1];
Result[2] := UpCase(letras_mi[Random(Length(letras_mi)) + 1]);
Result[3] := numeros[Random(Length(numeros)) + 1];
end;
UniqueString
また、ローカル変数を使用して、 var-parameter の余分な呼び出しをほとんど回避することで、わずかに高速になることもありますResult
。
ただし、特定のコンパイラ バージョンとオプションについて、タイミングまたは CPU レベルのコード チェックを行って、実際にどのような違いが生じるかを確認する必要があります。
function generate(cantidad: integer): string;
const
letras_mi = 'abcdefghijklmnopqrstuvwxyz';
numeros = '0123456789';
var local: string;
begin
SetLength(local, 3); // only alloc memory once
local[1] := letras_mi[Random(Length(letras_mi)) + 1];
local[2] := UpCase(letras_mi[Random(Length(letras_mi)) + 1]);
local[3] := numeros[Random(Length(numeros)) + 1];
Result := local;
end;
PS。ここでは、配列/文字列から文字を選択するよりも ord ベースのアプローチの方が優れていますが、それは独立した問題です。Chr
また、Delphi 2009 以降で関数を使用することには注意が必要です。#0..#127 値でのみ均一に機能します。eña やその他のヨーロッパ固有のもののように、いつの日か 7 ビットのサブレンジ外の文字が必要になるため、明示的に宣言された型キャストのようなものは、より安定した代替品になる可能性がありAnsiChar(i)
ます。WideChar(i)