Thema: Delphi Array-Funktionen

Einzelnen Beitrag anzeigen

Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.041 Beiträge
 
Delphi XE2 Professional
 
#5

AW: Array-Funktionen

  Alt 19. Jun 2021, 12: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....
  Mit Zitat antworten Zitat