2013-08-27 41 views

回答

5

你通过数组必须循环,寻找所需的值,例如:

function TMyClass.GetMinValue: Integer; 
var 
    Idx: Integer; 
begin 
    Result := MyArray[Low(MyArray)]; 
    for Idx := Low(MyArray)+1 to High(MyArray) do 
    begin 
    if MyArray[Idx] < Result then 
     Result := MyArray[Idx]; 
    end; 
end; 

function TMyClass.GetMaxValue: Integer; 
var 
    Idx: Integer; 
begin 
    Result := MyArray[Low(MyArray)]; 
    for Idx := Low(MyArray)+1 to High(MyArray) do 
    begin 
    if MyArray[Idx] > Result then 
     Result := MyArray[Idx]; 
    end; 
end; 
+1

上述'MinIntValue'和'MaxIntValue'函数已经在Delphi 7中,所以即使你是对的,你也不必使用这些代码,而是使用这些函数。 – TLama

+1

这种方法的好处在于,如果性能是一个问题,那么它可以合并成一个返回两个函数的函数。 – GrandmasterB

16

最简单的方法是使用执行此内置功能服务。它们被称为MinIntValueMaxIntValue,可以在数学单元中找到它们。

uses 
    Math; 
.... 
TheMin := MinIntValue(TheArray); 
TheMax := MaxIntValue(TheArray); 
+0

我正在使用动态数组。是否有任何函数可以帮助我处理它,因为我遇到了不兼容的类型错误 –

+0

我描述了使用整数动态数组处理的函数。你的阵列是什么类型? –

+0

我正在使用单独对象的动态数组。所以我得到的错误'不兼容的类型整数和TObject' –

9

有在单位数学的函数重载此:

function MinValue(const Data: array of Single): Single; overload; 
function MinValue(const Data: array of Double): Double; overload; 
function MinValue(const Data: array of Extended): Extended; overload; 
function MinIntValue(const Data: array of Integer): Integer; 

function MaxValue(const Data: array of Single): Single; overload; 
function MaxValue(const Data: array of Double): Double; overload; 
function MaxValue(const Data: array of Extended): Extended; overload; 
function MaxIntValue(const Data: array of Integer): Integer; 

,因为使用的是整数,你应该使用MinIntValue和MaxIntValue

+1

我正在使用动态数组。是否有任何函数可以帮助我处理它,因为我遇到了不兼容的类型错误 –

3

它可以在一个循环中完成.. 。

function ArrayValRange(somearray: array of integer; var minval: integer; var maxval: integer): boolean; 
var 
    i: integer; 
begin 
    result := false; 
    if length(somearray) < 1 then 
     exit; 
    result := true; 

    maxval = somearray[ Low(somearray)]; 
    minval = maxval; 

    for i := Low(somearray)+1 to High(somearray) do 
    begin 
    if somearray[i] > maxval then 
     maxval := somearray[i]; 

    if somearray[i] < minval then 
     minval := somearray[i]; 

    end; 
end; 

然后

if ArrayValRange(myarray, min, max) then 
begin 
    //do your thing 
end; 
+2

任何性能增益都可能因所创建的数组副本而丢失。使其成为常量。 –

相关问题