Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Arrays zusammenfügen (https://www.delphipraxis.net/130255-arrays-zusammenfuegen.html)

Spanky 5. Mär 2009 14:45


Arrays zusammenfügen
 
Hallo,

ich nutze die Explode-Funktion aus der Code Library. Diese Funktion rufe ich zwei Mal auf. Es wird jeweils ein Array zurückgegeben. Kann man die beiden Arrays, die zurückgegeben werden, mit einer Funktion zusammenfügen?

nuclearping 5. Mär 2009 14:55

Re: Arrays zusammenfügen
 
Ja, kann man. Brauchst doch nur ein neues Array machen, wo du die beiden Teile nacheinander anhängst.

Stichworte: SetLength, for-Schleife, ...

jaenicke 5. Mär 2009 14:57

Re: Arrays zusammenfügen
 
Das erste Array mit SetLength auf die richtige Länge bringen, dann den Inhalt des zweiten mit CopyMemory rüberschnippsen. ;-)

Neutral General 5. Mär 2009 15:02

Re: Arrays zusammenfügen
 
Zitat:

Zitat von jaenicke
Das erste Array mit SetLength auf die richtige Länge bringen, dann den Inhalt des zweiten mit CopyMemory rüberschnippsen. ;-)

Oder mit Move. Finde ich bequemer. Da kann man sich die @s sparen :stupid:

jaenicke 5. Mär 2009 15:05

Re: Arrays zusammenfügen
 
So meinte ich das:
Delphi-Quellcode:
var
  a, b: array of Integer;
  i, OldSize: Integer;
begin
  // a und b als Beispiele erstellen
  SetLength(a, 5);
  SetLength(b, 4);
  for i := Low(a) to High(a) do
    a[i] := i;
  for i := Low(b) to High(b) do
    b[i] := i*10;

  // a vergrößern und b reinkopieren
  if Length(b) > 0 then
  begin
    OldSize := Length(a);
    SetLength(a, OldSize + Length(b));
    CopyMemory(@a[OldSize], @b[0], Length(b) * SizeOf(b[0]));
  end;

  for i := Low(a) to High(a) do
    ShowMessage(InttoStr(a[i]));
Mit Move müsste ich selber erst schauen wie das aussieht. ;-)

Neutral General 5. Mär 2009 15:20

Re: Arrays zusammenfügen
 
Hi,

So ginge das mit Move:

Delphi-Quellcode:
var old: Integer;
begin
  old := Length(ArrayB);
  SetLength(ArrayB,old+Length(ArrayA);
  Move(ArrayA[0],ArrayB[old],Length(ArrayA)*SizeOf(ArrayA[0]));
end;
Ich hoffe ich hab keinen Fehler drin :stupid:

himitsu 5. Mär 2009 15:23

Re: Arrays zusammenfügen
 
Seid ihr jäckig?

Strings kopiert man nicht per Move und Co. :warn:
zumindestens nicht ohne gewisse Dinge zu beachten.

Explode liefert ein Array of String

jaenicke 5. Mär 2009 15:29

Re: Arrays zusammenfügen
 
Stimmt, dass es Strings sind und es damit einen Reference Counter gibt, daran habe ich nicht gedacht. :oops:

Dann bleibt noch mit for kopieren oder die Strings gleich in das richtige Array zu legen.

mimi 6. Mär 2009 15:29

Re: Arrays zusammenfügen
 
am besten so(Nicht getestet):
Delphi-Quellcode:
procedure AddToArray(var aArray:array of string; const aSoruce:Array of String);
var
  i,c1,c2:Integer;
begin
  c1:=Lenght(aSoruce);
  c2:=Lenght(aArray);
  SetLenght(aArray,c1+c2+1);

  for i:=0 to c1 do begin
    aArray[c2+i]:=aSoruce[i];
  end;
end;
so müsste das eigentlich klappen.

Root2k 1. Nov 2011 15:14

AW: Arrays zusammenfügen
 
Da dieser Eintrag bei diversen Suchmaschinen an oberster Stelle landet, wenn man nach "delphi zwei arrays verbinden" sucht, will ich die angegebene Methode noch korrigieren.

Delphi-Quellcode:
procedure AddToArray(var _alleStrings:Array of String; const _neueStrings:Array of String);
var
  i,c1,c2:Integer;
begin
  c1 := Length(_alleStrings);
  c2 := Length(_neueStrings);
  SetLength(_alleStrings, c1 + c2);

  for i := 0 to c2-1 do
  begin
    _alleStrings[c1 + i] := _neueStrings[i];
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:00 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz