Iterare attraverso la matrice confrontando il precedente trovato min e max.
Ecco uno snippet di codice. Seguendo il tuo chiarimento, ho modificato il codice per utilizzare Int64.
Min := High(Int64);
Max := Low(Int64);
for ThisNumber in MyArray do
begin
if ThisNumber < Min then
begin
Min := ThisNumber;
end
if ThisNumber > Max then
begin
Max := ThisNumber;
end;
end;
E 'interessante notare che in MaxIntValue Math.pas è implementato come:
function MaxIntValue(const Data: array of Integer): Integer;
var
I: Integer;
begin
Result := Data[Low(Data)];
for I := Low(Data) + 1 to High(Data) do
if Result < Data[I] then
Result := Data[I];
end;
Questa implementazione, simile alla risposta di David, utilizza il primo valore di matrice come valore iniziale. Ciò presuppone che l'array abbia almeno un elemento. Si noti inoltre che il ciclo può quindi iniziare a Basso (Dati) + 1 e salvare un confronto non necessario. Per i dati che hai descritto, con 100 elementi in ogni array, otterresti un miglioramento della velocità dell'1%, nel migliore dei casi.
Se le prestazioni non sono importanti, MinIntValue e MaxIntValue saranno più concisi. Se lanci il tuo, allora stai solo iterando attraverso l'array una volta invece di due volte.
fonte
2011-08-20 12:12:48
Penso che stavamo scrivendo allo stesso tempo! Mi piace la tua inizializzazione migliore, ma preferisco la struttura più compatta per ..., anche se dipende da quale versione di Delphi ha avuto se è supportata. –
+1 per 'MinValue' e' MaxValue'. Esiste anche ['MinIntValue'] (http://docwiki.embarcadero.com/VCL/en/Math.MinIntValue) e [' MaxIntValue'] (http://docwiki.embarcadero.com/VCL/en/Math. MaxIntValue). – NGLN
@ngln grazie per questo, hai ragione, naturalmente, lavoro abitualmente con dati in virgola mobile. –