Inno Setup 在 Pascal 脚本中获取最小和最大整数值
Inno Setup get Min and Max Integer values in Pascal Script
在我的 Pascal 脚本中的许多情况下,我需要 return 两个整数的最小值和最大值。但是每次我需要创建一个 TStringList
时,将我的两个或多个整数添加到它并将其转换为一个 Array Of String
,然后使用我的两个函数 ArrayOfStringMax
获取它的最小值和最大值] 和 ArrayOfStringMin.
我喜欢 Min
和 Max
这样的两个函数来简化 Delphi 中的 Math
单元。
例如,
Log(IntToStr(Min(1000, 26)));
输出应该是 26
.
Log(IntToStr(Max(45, 1989)));
输出应该是1989.
目前我只需要 Min
和 Max
作为 Integer
类型。如果一个函数即使是Single
、Double
、Extended
、Int64
类型也能做到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 脚本不支持泛型函数或函数重载。所以如果你需要为浮点数实现功能,你必须使用不同的名称,如MinFloat
、MaxFloat
。实现将是相同的(显然参数和 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;
在我的 Pascal 脚本中的许多情况下,我需要 return 两个整数的最小值和最大值。但是每次我需要创建一个 TStringList
时,将我的两个或多个整数添加到它并将其转换为一个 Array Of String
,然后使用我的两个函数 ArrayOfStringMax
获取它的最小值和最大值] 和 ArrayOfStringMin.
我喜欢 Min
和 Max
这样的两个函数来简化 Delphi 中的 Math
单元。
例如,
Log(IntToStr(Min(1000, 26)));
输出应该是 26
.
Log(IntToStr(Max(45, 1989)));
输出应该是1989.
目前我只需要 Min
和 Max
作为 Integer
类型。如果一个函数即使是Single
、Double
、Extended
、Int64
类型也能做到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 脚本不支持泛型函数或函数重载。所以如果你需要为浮点数实现功能,你必须使用不同的名称,如MinFloat
、MaxFloat
。实现将是相同的(显然参数和 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;