Randomize StringList

后端 未结 3 1436
有刺的猬
有刺的猬 2020-12-06 10:41

How can I randomize the Strings in the StringList similarly how this online tool works. If anyone is familiar with it, check this: http://textmechanic.co/Randomize-List.html

3条回答
  •  臣服心动
    2020-12-06 11:26

    One common algorithm to perform a shuffle is the Fisher-Yates shuffle. This generates uniformly distributed permutations.

    To implement on a Delphi TStrings object you can use this:

    procedure Shuffle(Strings: TStrings);
    var
      i: Integer;
    begin
      for i := Strings.Count-1 downto 1 do 
        Strings.Exchange(i, Random(i+1));
    end;
    

    Now, whilst in theory this will generate uniformly distributed permutations, the actual performance depends heavily on the quality of the random number generator. This is discussed in Knuth's Art of Computer Programming, volume 2, section 3.4.2, Algorithm P.

    Further reading:

    • Fisher-Yates shuffle (Wikipedia)
    • Jeff Attwood's two blog articles on shuffling: Shuffling and The Danger of Naïveté
    • The intuition behind Fisher-Yates shuffling (Eli Bendersky)
    • Art of Computer Programming, Donald Knuth, volume 2, section 3.4.2
    • Shuffling (Wikipedia)

提交回复
热议问题