Delphi 6中是否有内置函数?也就是说,一个函数来检索MaxValue
函数返回的值的索引。
如果不是最有效的例程?
答案 0 :(得分:1)
Delphi不提供这样的功能,不是在Delphi 6中,除非我弄错了,即使在现代的Delphi版本中也没有。
如果没有关于数组内容的任何信息,您必须检查每个元素以找到最大值和相应的索引。
uses
Math; // MaxDouble is defined by this unit
function IndexOfMaxValue(const x: array of Double): Integer;
var
Index: Integer;
MaxValue: Double;
begin
Result := -1;
MaxValue := -MaxDouble;
for Index := 0 to high(x) do begin
if x[Index]>MaxValue then begin
Result := Index;
MaxValue := x[Index];
end;
end;
end;
请注意,在tie的情况下,这是多个具有最大值的元素,此函数将返回第一个这样的元素的索引。
正如@LURD指出的那样,如果数组中的所有元素都是-MaxDouble
,那么函数返回-1。这可以这样解决:
function IndexOfMaxValue(const x: array of Double): Integer;
var
Index: Integer;
MaxValue: Double;
begin
if high(x) = -1 then begin
Result := -1;
end else begin
Result := 0;
MaxValue := x[0];
for Index := 1 to high(x) do begin
if x[Index]>MaxValue then begin
Result := Index;
MaxValue := x[Index];
end;
end;
end;
end;