2013-08-27 58 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

任何性能增益都可能因所創建的數組副本而丟失。使其成爲常量。 –

相關問題