Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Перетасовка строк в списке

01.01.2007
{ **** UBPFD *********** by kladovka.net.ru ****
>> Перетасовка строк в списке
 
Процедура тасует строки в списке.
List - Список строк
MoveCount - необязательный параметр, задающий количество перестановок,
если этот параметр опущен, либо меньше или равен нулю, его значение
принимается равным C*C-C, где C - количество строк в списке.
 
Зависимости: SysUtils, Classes
Автор:       Dimka Maslov, mainbox@endimus.ru, ICQ:148442121, Санкт-Петербург
Copyright:   Dimka Maslov
Дата:        18 ноября 2002 г.
********************************************** }
 
procedure
ShuffleStrings(List: TStrings; MoveCount: Integer = 0);
var
 i
, N, C: Integer;
 Index1
, Index2: Integer;
 
Str: string;
 
Obj: TObject;
begin
 
List.BeginUpdate;
 
try
  C
:=List.Count;
  N
:=MoveCount;
 
if N <= 0 then N:=C*C-C;
 
for i:=0 to N do begin
   Index1
:=Random(C);
   Index2
:=Random(C);
   
Str:=List.Strings[Index1];
   
Obj:=List.Objects[Index1];
   
List.Strings[Index1]:=List.Strings[Index2];
   
List.Objects[Index1]:=List.Objects[Index2];
   
List.Strings[Index2]:=Str;
   
List.Objects[Index2]:=Obj;
 
end;
 
finally
 
List.EndUpdate;
 
end;
end;

Пример использования:

ShuffleStrings(Memo1.Lines)