San*_*ira 13 delphi delphi-xe2
我如何随机化StringList中的字符串,类似于此在线工具的工作原理.如果有人熟悉它,请检查:http://textmechanic.co/Randomize-List.html
Dav*_*nan 21
执行混洗的一种常见算法是Fisher-Yates shuffle.这产生均匀分布的排列.
要在Delphi TStrings对象上实现,您可以使用:
procedure Shuffle(Strings: TStrings);
var
i: Integer;
begin
for i := Strings.Count-1 downto 1 do
Strings.Exchange(i, Random(i+1));
end;
Run Code Online (Sandbox Code Playgroud)
现在,虽然理论上这将产生均匀分布的排列,但实际性能在很大程度上取决于随机数发生器的质量.这在Knuth的计算机编程艺术,第2卷,第3.4.2节,算法P中讨论过.
进一步阅读:
只需循环遍历字符串列表并给每个项目一个不同的随机位置:
for i := StringList.Count - 1 downto 1 do
StringList.Exchange(i, Random(i+1));
Run Code Online (Sandbox Code Playgroud)
[编辑] 稍微改变循环以使洗牌统一。
| 归档时间: |
|
| 查看次数: |
3366 次 |
| 最近记录: |