Powtórz po tablicy w porównaniu do poprzednio znalezionych min i maks.
Oto fragment kodu. Po wyjaśnieniu edytowałem kod, aby użyć 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;
To ciekawe, że MaxIntValue w Math.pas jest zaimplementowany jako:
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;
Implementacja ta, podobnie jak odpowiedź Dawida, korzysta z pierwszej wartości tablicy jako wartości początkowej. Zakłada się, że tablica ma co najmniej jeden element. Zauważ także, że pętla może następnie zacząć od Niskiego (Dane) + 1 i zapisać jedno niepotrzebne porównanie. W przypadku danych, które opisałeś, ze 100 elementami w każdej macierze, uzyskasz w najlepszym razie 1% poprawy prędkości.
Jeśli wydajność nie ma znaczenia, wartości MinIntValue i MaxIntValue będą bardziej zwięzłe. Jeśli rzucasz własną, to tylko iterujesz po tablicy raz, a nie dwa razy.
Myślę, że pisaliśmy w tym samym czasie! Bardziej podoba mi się twoja inicjalizacja, ale ja wolę bardziej kompaktową dla ... w strukturze, choć zależy to od tego, którą wersję Delphi miał, czy jest obsługiwana. –
+1 Dla 'MinValue' i' MaxValue'. Istnieje również ['MinIntValue'] (http://docwiki.embarcadero.com/VCL/en/Math.MinIntValue) i [' MaxIntValue'] (http://docwiki.embarcadero.com/VCL/en/Math. MaxIntValue). – NGLN
@ngln dzięki za to, masz rację oczywiście, ja zwykle pracuję z danymi zmiennoprzecinkowymi. –