Registriert seit: 17. Nov 2005
Ort: Hamburg
1.057 Beiträge
Delphi XE2 Professional
|
AW: Array-Funktionen
19. Jun 2021, 13:53
@Wendelin:
Ich hab mal ein kleines Set von Funktionen zusammengestellt die den Index von bestimmten Werten in einem Array zurückgeben.
Erstes Vorkommen eines Wertes
Delphi-Quellcode:
// Gibt den Index des ersten Vorkommens von Value ab Start zurück
FUNCTION IndexOfValue(const Data:Array of Integer; Value,Start:Integer):Integer; overload;
begin
if Start<Length(Data) then
for Result:=Max(0,Start) to High(Data) do
if Data[Result]=Value then Exit;
Result:=-1;
end;
Delphi-Quellcode:
// Gibt den Index des ersten Vorkommens von Value in Data zurück
FUNCTION IndexOfValue(const Data:Array of Integer; Value:Integer):Integer; overload;
begin
Result:=IndexOfValue(Data,Value,0);
end;
Letztes Vorkommen eines Wertes
Delphi-Quellcode:
// Gibt den Index des letzten Vorkommens von Value in Data vor oder an Start zurück
FUNCTION LastIndexOfValue(const Data:Array of Integer; Value,Start:Integer):Integer; overload;
begin
if Start>=0 then
for Result:=Min(High(Data),Start) downto 0 do
if Data[Result]=Value then Exit;
Result:=-1;
end;
Delphi-Quellcode:
// Gibt den Index des letzten Vorkommens von Value in Data zurück
FUNCTION LastIndexOfValue(const Data:Array of Integer; Value:Integer):Integer; overload;
begin
Result:=LastIndexOfValue(Data,Value,High(Data));
end;
Erstes Vorkommen des kleinsten Wertes
Delphi-Quellcode:
// Gibt den Index des kleinsten Wertes in Data ab Start zurück
FUNCTION IndexOfMinValue(const Data:array of Integer; Start:Integer):Integer; overload;
begin
Result:=IndexOfValue(Data,MinIntValue(Data),Start);
end;
Delphi-Quellcode:
// Gibt den Index des ersten Vorkommens des kleinsten Wertes in Data zurück
FUNCTION IndexOfMinValue(const Data:array of Integer):Integer; overload;
begin
Result:=IndexOfMinValue(Data,0);
end;
Letztes Vorkommen des kleinsten Wertes
Delphi-Quellcode:
// Gibt den Index des letzten Vorkommens des kleinsten Wertes in Data an oder vor Start zurück
FUNCTION LastIndexOfMinValue(const Data:array of Integer; Start:Integer):Integer; overload;
begin
Result:=LastIndexOfValue(Data,MinIntValue(Data),Start);
end;
Delphi-Quellcode:
// Gibt den Index des letzten Vorkommens des kleinsten Wertes in Data zurück
FUNCTION LastIndexOfMinValue(const Data:array of Integer):Integer; overload;
begin
Result:=LastIndexOfMinValue(Data,High(Data));
end;
Erstes Vorkommen des größten Wertes
Delphi-Quellcode:
// Gibt den Index des größten Wertes in Data ab Start zurück
FUNCTION IndexOfMaxValue(const Data:array of Integer; Start:Integer):Integer; overload;
begin
Result:=IndexOfValue(Data,MaxIntValue(Data),Start);
end;
Delphi-Quellcode:
// Gibt den Index des ersten Vorkommens des größten Wertes in Data zurück
FUNCTION IndexOfMaxValue(const Data:array of Integer):Integer; overload;
begin
Result:=IndexOfMaxValue(Data,0);
end;
Letztes Vorkommen des größten Wertes
Delphi-Quellcode:
// Gibt den Index des letzten Vorkommens des größten Wertes in Data an oder vor Start zurück
FUNCTION LastIndexOfMaxValue(const Data:array of Integer; Start:Integer):Integer; overload;
begin
Result:=LastIndexOfValue(Data,MaxIntValue(Data),Start);
end;
Delphi-Quellcode:
// Gibt den Index des letzten Vorkommens des größten Wertes in Data zurück
FUNCTION LastIndexOfMaxValue(const Data:array of Integer):Integer; overload;
begin
Result:=LastIndexOfMaxValue(Data,High(Data));
end;
Hiermit kurz getestet
Delphi-Quellcode:
PROCEDURE TMain.Test;
FUNCTION TestFuncs(const Data:array of Integer):String;
var I:Integer;
begin
Result:='Data = [';
for I:=0 to High(Data) do
Result:=Result+IntToStr(Data[I])+', ';
Result[Length(Result)-1]:=']';
Result[Length(Result)-1]:=#13;
Result:=Result+
IntToStr(IndexOfValue(Data,5,5))+' IndexOfValue(Data,5,5)'+#13+
IntToStr(IndexOfValue(Data,5))+' IndexOfValue(Data,5)'+#13+
IntToStr(LastIndexOfValue(Data,5,5))+' LastIndexOfValue(Data,5,5)'+#13+
IntToStr(LastIndexOfValue(Data,5))+' LastIndexOfValue(Data,5)'+#13+
IntToStr(IndexOfMinValue(Data,5))+' IndexOfMinValue(Data,5)'+#13+
IntToStr(IndexOfMinValue(Data))+' IndexOfMinValue(Data)'+#13+
IntToStr(LastIndexOfMinValue(Data,5))+' LastIndexOfMinValue(Data,5)'+#13+
IntToStr(LastIndexOfMinValue(Data))+' LastIndexOfMinValue(Data)'+#13+
IntToStr(IndexOfMaxValue(Data,5))+' IndexOfMaxValue(Data,5)'+#13+
IntToStr(IndexOfMaxValue(Data))+' IndexOfMaxValue(Data)'+#13+
IntToStr(LastIndexOfMaxValue(Data,5))+' LastIndexOfMaxValue(Data,5)'+#13+
IntToStr(LastIndexOfMaxValue(Data))+' LastIndexOfMaxValue(Data)';
end;
begin
ShowMessage(TestFuncs([4,6,5,3,6,7,8,5,2,3,5,1]));
end;
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
|