Procedure GetRandom(nEnd:Integer);
var
nTmp,nTmp2:Integer; LstTmp:TStringList;
begin
LstTmp:=TStringList.Create;
for nTmp:=0 to nEnd-1 do LstTmp.Add(IntToStr(nTmp));
for nTmp:=nEnd-1 Downto 0 do
begin
Randomize; nTmp2:=Random(nTmp+1);
ShowMessage(LstTmp[nTmp2]);//显示获取的随机数
LstTmp.Delete(nTmp2);
end;
LstTmp.Free;
end;
var
nTmp,nTmp2:Integer; LstTmp:TStringList;
begin
LstTmp:=TStringList.Create;
for nTmp:=0 to nEnd-1 do LstTmp.Add(IntToStr(nTmp));
for nTmp:=nEnd-1 Downto 0 do
begin
Randomize; nTmp2:=Random(nTmp+1);
ShowMessage(LstTmp[nTmp2]);//显示获取的随机数
LstTmp.Delete(nTmp2);
end;
LstTmp.Free;
end;
解决方案 »
- delphi 接口
- 【散分】发布函数代码查询器 FunSearcher v1.0.0
- 菜鸟求救
- 在北京求职,delphi,熟悉分布式数据库开发,windows消息处理,近两年的工作经验。请问月薪大约多少
- 急问一个QuickReport的问题!!!在线等,高分相送!!!
- 小弟有一些问题
- 如何将SELECT后的结果存到一个临时表中? 在程序关掉后临时表会自动删除吗?
- 如何在dbgrid中选中多行记录?
- 如何作这样的状态栏!急!
- Delphi中的trackBar能否有“OnSlider”事件?
- 用以下方法获取0~nEnd不重复(唯一)的随机数,有毛病吗?
- 高手们,求教DELPHI7开发程序能不能直接发布到web发布问题啊?????求思路,谢谢
2. 取得一个整数随机数, 搞那么多字符串处理不累吗? 你的代码包含大量申请内存和释放内存的操作, 这些操作是很慢的.算法思路是对的, 换成对整数数组的操作就完美了
var
nTmp,nTmp2 : Integer;
LstTmp : array of Integer; //用整数数组代替TStringList提升速度
begin
Randomize; //Randomize只需要调用一次
SetLength(LstTmp,nEnd); //只需要分配一次内存, 而每次调用用TStringList.Add都会导致内存分配
for nTmp := 0 to nEnd-1 do LstTmp[nTmp] := nTmp; //直接对数组下标操作不涉及内存分配
for nTmp := nEnd-1 downto 0 do
begin
nTmp2 := Random(nTmp+1);
ShowMessage(inttostr(LstTmp[nTmp2]));
LstTmp[nTmp2] := LstTmp[nTmp]; //这样可以避免内存释放操作
end;
end; //LstTmp在函数调用完成后自动释放