Janilabo Posted September 6, 2012 Share Posted September 6, 2012 (edited) function TIAByRange(aStart, aFinish: Integer): TIntArray; var i: Integer; begin if (aStart <> aFinish) then begin SetLength(Result, (IAbs(aStart - aFinish) + 1)); if (aStart > aFinish) then for i := aStart downto aFinish do Result[(aStart - i)] := i else for i := aStart to aFinish do Result[(i - aStart)] := i; end else Result := [aStart]; end; TIAByRange2bit: function TIAByRange2bit(aStart, aFinish: Integer): TIntArray; var g, l, i: Integer; begin if (aStart <> aFinish) then begin l := (IAbs(aStart - aFinish) + 1); SetLength(Result, l); g := ((l - 1) div 2); case (aStart < aFinish) of True: begin for i := 0 to g do begin Result[i] := (aStart + i); Result[((l - 1) - i)] := (aFinish - i); end; if ((l mod 2) <> 0) then Result[i] := (aStart + i); end; False: begin for i := 0 to g do begin Result[i] := (aStart - i); Result[((l - 1) - i)] := (aFinish + i); end; if ((l mod 2) <> 0) then Result[i] := (aStart - i); end; end; end else Result := [aStart]; end; Timing the methods: TIAByRange(-999999, 999999): 1999999 items [7441 ms.] TIAByRange2bit(-999999, 999999): 1999999 items [6942 ms.] TIAByRange(999999, -999999): 1999999 items [7395 ms.] TIAByRange2bit(999999, -999999): 1999999 items [7004 ms.] Successfully executed (28784.3489 ms) Edited September 29, 2012 by Janilabo Functions updated. Quote Link to comment Share on other sites More sharing options...