ich habe, als ich mich seiner Zeit in dynamische Arrays und Objektorientierung eingearbeitet habe, mal eine
unit IntergerListen erstellt.
Delphi-Quellcode:
unit IntegerListen;
interface
type
TIntegerListe =
class (TObject)
Count : integer;
Item :
array of integer;
function getItem (
const k: integer) : integer;
procedure setItem (
const k: integer;
const u: integer);
procedure addItem (
const u: integer);
procedure insItem (
const k: integer;
const u: integer);
procedure delItem (
const k: integer);
procedure clear;
procedure sort;
function IndexOf (
const u: integer) : integer;
public
constructor Create;
destructor Destroy;
override;
end;
implementation
function TIntegerListe.getItem (
const k: integer) : integer;
begin
RESULT:=Item[k];
end;
procedure TIntegerListe.setItem (
const k: integer;
const u: integer);
begin
Item[k]:=u;
end;
procedure TIntegerListe.addItem (
const u: integer);
begin
Count:=Count+1;
setLength(Item,Count);
Item[Count-1]:=u;
end;
procedure TIntegerListe.insItem (
const k: integer;
const u: integer);
var
i: integer;
begin
Count:=Count+1;
setLength(Item,Count);
for i:=Count-1
downto k+1
do Item[i]:=Item[i-1];
Item[k]:=u;
end;
procedure TIntegerListe.delItem (
const k: integer);
var
i: integer;
begin
Count:=Count-1;
for i:=k
to Count-1
do Item[i]:=Item[i+1];
Item[Count]:=0;
setLength(Item,Count);
end;
procedure TIntegerListe.clear;
begin
Count:=0;
setLength(Item,Count);
end;
constructor TIntegerListe.Create;
begin
inherited Create;
clear;
end;
destructor TIntegerListe.Destroy;
begin
clear;
inherited;
end;
procedure TIntegerListe.Sort;
var
i,j,s: integer;
begin
for i:=0
to Count-2
do
for j:=i+1
to Count-1
do
begin
s:=Item[i];
if Item[i]>Item[j]
then
begin
Item[i]:=Item[j];
Item[j]:=s;
end;
end;
end;
function TIntegerListe.IndexOf (
const u: integer): integer;
var
i: integer;
begin
result:=-1;
for i:=0
to Count-1
do
if Item[i]=u
then
begin
result:=i;
break;
end;
end;
end.
Damit sollte es relativ einfach gehen, z.B. so:
Delphi-Quellcode:
implementation
uses
IntegerListen;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
Liste,Doppel : TIntegerListe;
i,j : integer;
begin
// Liste erzeugen
Liste := TIntegerListe.Create;
Doppel := TIntegerListe.Create;
// Liste füllen
Liste.addItem(5);
Liste.addItem(2);
Liste.addItem(-5);
Liste.addItem(3);
Liste.addItem(5);
Liste.addItem(5);
// Doppel initialisieren
for i:=0 to Liste.Count-1 do
Doppel.addItem(1);
// Doppel herausfinden
for i:=0 to Liste.Count-2 do
for j:=i+1 to Liste.Count-1 do
if Liste.Item[i]=Liste.Item[j] then
Doppel.Item[i]:=Doppel.Item[i]+1;
// Doppel rauslöschen
i:=-1;
while i<=Liste.Count-2 do
begin
i:=i+1;
if Doppel.getItem(i)>1 then
begin
Liste.delItem(i);
Doppel.delItem(i);
i:=i-1;
end;
end;
// ggf. sortieren
Liste.sort;
// Liste ausgeben
for i:=0 to Liste.Count-1 do
showmessage (IntToStr(Liste.getItem(i)));
// und tschüß
Liste.Free;
Doppel.Free;
end;