Guten Abend
DP,
leider muss ich nochmal stören, da ich erneut auf ein Problem gestoßen bin.
Ich habe eine Klasse, die als privates Attribut ein dynamisches Array of TPerson (Name: "index") hat. Das Record (TPerson) hat Items mit den Datentypen Integer, Real & String. Das Record möchte ich nun zB. nach dem Namen sortieren. Dafür habe ich gerade eine Prozedur geschrieben, die das erledigt. Nun verfügt mein Record aber auch zB. über das Item Stadt - wie kann ich meine Prozedur nun so umschreiben, dass sie je nach Parameter nach etwas anderem sortiert.
Die Prozedur sieht so aus (wahrs. kennt ihr bessere Varianten, aber diese hab ich selbst (und wahrscheinlich auch tausende Andere vor mir) "selbst" erarbeitet):
Delphi-Quellcode:
procedure TBlub.sortByName();
var
i, j, k: Integer;
temp: TPerson;
begin
for i := 1
to Length(
index) - 1
do
begin
j := i;
while not (j = 0)
do
begin
if Length(
index[j - 1].
Name) > Length(
index[j].
Name)
then
begin // der kleinere String (von der Länge her) nach vorne
temp :=
index[j];
index[j] :=
index[j - 1];
index[j - 1] := temp;
end;
for k := 1
to Min(Length(
index[j - 1].
Name), Length(
index[j].
Name))
do
begin
if ord(
index[j].
Name[k]) < ord(
index[j - 1].
Name[k])
then
begin
temp :=
index[j];
index[j] :=
index[j - 1];
index[j - 1] := temp;
break
end
else if ord(
index[j].
Name[k]) = ord(
index[j - 1].
Name[k])
then
Continue
else
break;
end;
Dec(j);
end;
end;
end;
Natürlich könnte ich die Prozedur kopieren, in "sortByStadt" umbennen und "Name" durch "Stadt" ersetzen, doch dabei würde ich ja nichts lernen.
Also eig. ist die Frage dieses Threads: Wie kann ich die Prozedur so abstrahieren, dass ich als Parameter zB. "Name" angeben kann und dann das Array nach "Name" hin sortiert wird.
Liebe Grüße,
Max