Itere a través de la matriz en comparación con los mínimos y máximos encontrados anteriormente.
Aquí hay un fragmento de código. Después de su aclaración, he editado el código para usar 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;
Es interesante observar que en MaxIntValue Math.pas se implementa como:
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;
Esta aplicación, similar a la respuesta de David, utiliza el primer valor de la matriz como valor inicial. Esto supone que la matriz tiene al menos un elemento. Tenga en cuenta también que el bucle puede comenzar en Bajo (Datos) + 1 y guardar una comparación innecesaria. Para los datos que ha descrito, con 100 elementos en cada matriz, obtendrá una mejora de velocidad del 1%, en el mejor de los casos.
Si el rendimiento no es importante, entonces MinIntValue y MaxIntValue serán más concisos. Si tira el suyo, solo está iterando a través de la matriz una vez en lugar de dos.
¡Creo que estábamos escribiendo al mismo tiempo! Me gusta más tu inicialización, pero prefiero la estructura más compacta ... aunque depende de la versión de Delphi que tenga si es compatible. –
+1 para 'MinValue' y' MaxValue'. También hay ['MinIntValue'] (http://docwiki.embarcadero.com/VCL/en/Math.MinIntValue) y [' MaxIntValue'] (http://docwiki.embarcadero.com/VCL/en/Math. MaxIntValue). – NGLN
@ngln gracias por eso, tienes razón, por supuesto, habitualmente trabajo con datos de coma flotante. –