Inno Setup 在 Pascal 脚本中获取最小和最大整数值

Inno Setup get Min and Max Integer values in Pascal Script

在我的 Pascal 脚本中的许多情况下,我需要 return 两个整数的最小值和最大值。但是每次我需要创建一个 TStringList 时,将我的两个或多个整数添加到它并将其转换为一个 Array Of String,然后使用我的两个函数 ArrayOfStringMax 获取它的最小值和最大值] 和 ArrayOfStringMin.

我喜欢 MinMax 这样的两个函数来简化 Delphi 中的 Math 单元。

例如,

Log(IntToStr(Min(1000, 26)));

输出应该是 26.

Log(IntToStr(Max(45, 1989)));

输出应该是1989.

目前我只需要 MinMax 作为 Integer 类型。如果一个函数即使是SingleDoubleExtendedInt64类型也能做到return最小值和最大值,这将是一个非常有用的函数.

更新

procedure StringListToArrayOfString(StringList: TStringList; var ArrayOfString: Array Of String);
var
  X: Integer;
begin
  SetLength( ArrayOfString, StringList.Count);
  for X := 0  to (StringList.Count - 1)  do ArrayOfString[X] := StringList.Strings[X];
end;

function ArrayOfStringMax(ArrayOfString: Array of String): String;
var
  X, M: Integer;
begin
  M := StrToInt(ArrayOfString[Low(ArrayOfString)]);
  for X := 1 to High(ArrayOfString) do
  if StrToInt(ArrayOfString[X]) > M then M := StrToInt(ArrayOfString[X]);
  Result := IntToStr(M);
end;

function ArrayOfStringMin(ArrayOfString: Array of String): String;
var
  X, M: Integer;
begin
  M := StrToInt(ArrayOfString[Low(ArrayOfString)]);
  for X := 1 to High(ArrayOfString) do
  if StrToInt(ArrayOfString[X]) < M then M := StrToInt(ArrayOfString[X]);
  Result := IntToStr(M);
end;

这是我目前在脚本中使用的三个函数。

提前致谢。

function Max(A, B: Integer): Integer;
begin
  if A > B then
    Result := A
  else
    Result := B;
end;

function Min(A, B: Integer): Integer;
begin
  if A < B then
    Result := A
  else
    Result := B;
end;

Inno Setup Pascal 脚本不支持泛型函数或函数重载。所以如果你需要为浮点数实现功能,你必须使用不同的名称,如MinFloatMaxFloat。实现将是相同的(显然参数和 return 值类型除外)。

尽管您可以共享整数和浮点类型的实现。您可以对 Integer 类型使用 LongInt 实现。同样,您可以对 Single 类型使用 Double 实现。


如果要实现数字数组的功能,则无需将数组转换为字符串。只需使用数字数组,array of Integer:

function Max(N: array of Integer): Integer;
var
  I: Integer;
begin
  if GetArrayLength(N) = 0 then RaiseException('Array is empty');

  Result := N[Low(N)];
  for I := Low(N) + 1 to High(N) do
  begin
    if N[I] > Result then Result := N[I];
  end;
end;