2013-08-27 2 views
2

array of Integer에 의해 정의 된 특정 동적 배열의 최소값과 최대 값을 어떻게 찾을 수 있습니까?동적 정수 배열의 최소값과 최대 값을 얻는 방법?

예 :

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; 

답변

5

당신이 원하는 값을 찾고, 배열을 통해 루프가, 서비스. 그들은 MinIntValueMaxIntValue라고하며 수학 단위에서 찾을 수 있습니다.

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

언급 된'MinIntValue'와'MaxIntValue' 함수는 이미 델파이 7에 있습니다. 그렇기 때문에이 코드를 사용할 필요는 없지만 그 함수를 사용하십시오. – TLama

+1

이 접근법에 대한 좋은 점은 성능이 문제인 경우 둘 모두를 반환하는 단일 함수로 결합 할 수 있다는 것입니다. – GrandmasterB

16

가장 쉬운 방법은이 작업을 수행하는 내장 함수를 사용하는 것입니다 : 예

Y: array of integer; 
+0

동적 배열을 사용 중입니다. 호환되지 않는 형식 오류가 발생하여 처리하는 데 도움이되는 함수가 있습니까? –

+0

설명하는 함수는 정수의 동적 배열에서 작동합니다. 배열 유형은 무엇입니까? –

+0

나는 별도의 객체의 동적 배열로 작업하고있다. 그래서 나는 'Incompatible types Integer and 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

모든 배열의 복사본에 의해 성능 손실이 발생할 수 있습니다. 그것을 const로 만드십시오. –

관련 문제