Idiom #158 Random sublist
Create a new list y from randomly picking exactly k elements from list x.
It is assumed that x has at least k elements.
Each element must have same probability to be picked.
Each element from x must be picked at most once.
Explain if the original ordering is preserved or not.
function RandArr(Max: Integer): TIntegerDynArray; var i, j, temp: Integer; begin SetLength(Result, Max+1); for i := Low(Result) to High(Result) do Result[i] := i; i := Length(Result); while i > 0 do begin Dec(i); j := RandomRange(0,i); temp := Result[i]; Result[i] := Result[j]; Result[j] := temp; end; end; var Idx: TIntegerDynArray; begin Idx := RandArr(High(X)); SetLength(Y, k); for i := 0 to k-1 do Y[i] := X[Idx]; end.