Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Add Funktion für Arrays


Yacoon - Di 18.02.03 22:02
Titel: Add Funktion für Arrays
Gibt es für Array bereits vorhandene Add Funktionen oder muss ich die selbst schreiben?
Wenn ich die selbst schreibe, ist es dann möglich einen neuen Typ vom Array abzuleiten um diesen um eine solche Funktion zu erweitern, oder muss ich das mit einer Funktion bzw Prozedur machen?


Fred Ferkel - Di 18.02.03 22:25

hi
ich wüsste nicht von so einer funktion aber das das nur mit dynamischen arrays geht is ja klar oder?

cya


Yacoon - Di 18.02.03 22:30

Ja das ist klar :wink:


Fred Ferkel - Di 18.02.03 22:44

hi

ich hab zwar nicht so die übung im umganag mit pointern und so und cih lass mich herne belehren wenn das hier schlechter stil sein sollte, also BITTE sagt wenn das mist ist...ich mein ich hab ncoh nie so kompliziert 1,2,3 ausgegeben aber naja es geht zumindest :D

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
type ARR=array of integer;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure addtoarray(x,y:pointer);
begin
  setlength(ARR(x^),length(ARR(x^))+1);
  ARR(x^)[high(ARR(x^))]:=integer(y^);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i:integer;
  x:array of integer;
begin
  for i:=1 to 3 do
    begin
      addtoarray(@x,@i);
      showmessage(inttostr(x[high(x)]));
    end;
end;


cya


HeLe - So 02.03.03 11:45

:lol: Ich will dir ja nicht den Spaß verderben (dein Code sieht echt toll aus :lol: ), aber das du dein Beispiel ohne Zeigeroverkill auch viel einfacher schreiben kannst, ist dir hoffentlich klar:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
type ARR=array of integer;

procedure addtoarray(var x: arr; y: integer);
begin
  setlength(x, length(x)+1);
  x[high(x)]:=y;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
  x: arr;
begin
  x:=nil;
  for i:=1 to 3 do
  begin
    addtoarray(x,i);
    showmessage(inttostr(x[high(x)]));
  end;
end;


im übrigen kann ich nur empfehlen sich die Containerklassen wie tlist, tobjectlist und konsorten mal genauer anzusehen, die sind nämlich für aufgaben, bei denen viel hinzugefügt/entfernt wird eindeutig die bessere Wahl (u.a. bieten manche auch Methoden zum suchen/sortieren usw.)


Fred Ferkel - So 02.03.03 12:00

ich dachte immer das wenn man mit
(var x:IrgendEinArraytyp) an ne funcktion/prozedur übergibt dies recht speicheraufwendig wäre...ist dem nicht so?
ansonsten hättest du natürlich recht...:)


AndyB - So 02.03.03 12:38

Dem ist nicht so. Ein als var gekennzeichneter Parameter wird automatisch vom Compiler als Zeiger (call by reference) übergeben.


Fred Ferkel - So 02.03.03 12:50

cool :D