生成指定范围的随机数序列
有这样一个需求,我要生成1,2,3...100,其顺序是随机的。
procedure TForm1.Button1Click(Sender: TObject); var i,j: Integer; lst: TList<Integer>; rd: TkbmMWRandomPCGUInt32; r: Integer; begin Log.TimeStart('random'); j:=strtoint(Edit1.Text); //生成数字的个数. lst := TList<Integer>.Create; rd := TkbmMWRandomPCGUInt32.Create; for i := 1 to j do begin r := rd.Random(1, j+1); while lst.Contains(r) do // while lst.IndexOf(r)<>-1 do begin r := rd.Random(1, j+1); end; lst.Add(r); end; Log.TimeEnd('random', '生在完毕:'+Edit1.Text); // memo1.Lines.Clear; // for i := 0 to lst.count-1 do // begin // memo1.Lines.Add(Format('i=%d value=%d',[i,lst[i]])); // end; lst.Free; rd.free end;
下面是运行结果:
这个代码中使用了kbmMW随机数生成器TkbmMWRandomPCGUInt32,需要注意的就是Random生成的数字范围,Random(a,b),只生成a与b-1范围内的整数,不含b,例如a=1,b=10,那么只生成1到9间的随机数。