こんにちはデルファイで一番小さい数字と最大の数字を見つけるにはどうすればいいですか?配列内の最小の番号と最大の番号を見つける方法は?
は、私は配列に格納された10種類の数字を持っていると仮定します。
は、どのように私は私のアレイで最大の数と最小の番号を見つけることができますか?
こんにちはデルファイで一番小さい数字と最大の数字を見つけるにはどうすればいいですか?配列内の最小の番号と最大の番号を見つける方法は?
は、私は配列に格納された10種類の数字を持っていると仮定します。
は、どのように私は私のアレイで最大の数と最小の番号を見つけることができますか?
直線的に配列をループするだけです。最小値の変数と最大値の変数を保持します。両方を配列の最初の値に初期化します。次に、各要素について、その要素が最小値または最大値よりも小さいかまたは大きい場合に、minまたはmax値を更新します。
明らかに、このコードはCount> 0とみなします。
MathユニットのMinValueルーチンとMaxValueルーチンを同じように使用できます。
以前の検索された最小値および最大値と比較して配列を反復します。
ここにコードスニペットがあります。あなたの説明に続いて、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;
それはMath.pasでMaxIntValueとして実装されていることに注意することは興味深いです:
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;
この実装では、デビッドの答えと同様に、初期値として最初の配列の値を使用しています。これは、配列に少なくとも1つの要素があることを前提としています。また、ループはLow(Data)+ 1で開始し、不要な比較を1つ保存することができます。あなたが記述したデータでは、各配列に100個の要素があり、せいぜい1%の速度向上しか得られません。
性能が重要でない場合は、MinIntValueとMaxIntValueがより簡潔になります。独自のロールを作成する場合は、配列を2回ではなく1回だけ繰り返します。
フォーマットのためにDavidに感謝します。 –
配列がint64ではありません。 –
コードがInt64に変更されました。 –
私たちは同時に入力していると思います!私はあなたの初期化がより好きですが、私はよりコンパクトなfor..in構造を好んでいますが、サポートされているDelphiのバージョンによって異なります。 –
+1「MinValue」と「MaxValue」の場合。 ['MinIntValue'](http://docwiki.embarcadero.com/VCL/en/Math.MinIntValue)と[' MaxIntValue'](http://docwiki.embarcadero.com/VCL/en/Math)もあります。 MaxIntValue)。 – NGLN
@nglnありがとうございます、あなたは当然ですが、私は常習的に浮動小数点データを扱います。 –