【发布时间】:2010-08-05 07:01:10
【问题描述】:
我想制作一个名称列表,然后随机选择,但应该调用所有名称。当然不会重复。德尔福代码
【问题讨论】:
标签: delphi list sorting random
我想制作一个名称列表,然后随机选择,但应该调用所有名称。当然不会重复。德尔福代码
【问题讨论】:
标签: delphi list sorting random
我的建议是做一个名字列表,然后把名字洗牌,然后一个一个地叫它。 我希望这段代码对你有用。
...
private
{ Private declarations }
FNameList : TStringList;
FNameIndex: Integer;
public
{ Public declarations }
end;
...
procedure TForm1.FormCreate(Sender: TObject);
var i: Integer;
begin
Randomize;
FNameIndex := 0;
FNameList := Tstringlist.Create;
// FNameList.LoadFromFile('NameList.txt'); or
FNameList.Add('Name 1');
FNameList.Add('Name 2');
FNameList.Add('Name 3');
FNameList.Add('Name 4');
FNameList.Add('Name 5');
FNameList.Add('Name 6');
for i:= 1 to 100 do // shuffle 100 times. its up to you
FNameList.Exchange(Random(FNameList.Count-1), Random(FNameList.Count-1));
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FNameList.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if FNameIndex < FNameList.Count then
begin
showmessage(FNameList.Strings[FNameIndex]);
inc(FNameIndex);
end else showmessage('Done!');
end;
【讨论】:
好吧,我无法为您提供 delphi 代码,但我在这里遇到了同样的问题。我正在使用来自该网站http://de.fakenamegenerator.com 的姓名列表(带有地址)。
也许有点帮助。
【讨论】:
我不喜欢 delphi,但算法非常简单。只需将名称插入具有随机生成索引的列表即可。这样你就有了一个随机排序的名字列表。然后迭代它。
【讨论】:
将名称复制到 List 中并执行以下操作:
// assuming list is a stringlist containing the names
while List.Count > 0 do begin
idx := Random(List.Count);
// do something with List[idx]
List.Delete(idx);
end;
【讨论】: