如何在数组中找到最大值的索引?

时间:2017-04-11 09:26:10

标签: delphi delphi-6

Delphi 6中是否有内置函数?也就是说,一个函数来检索MaxValue函数返回的值的索引。

如果不是最有效的例程?

1 个答案:

答案 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;