![]() |
Arrays zusammenfügen
Hallo,
ich nutze die ![]() |
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, ... |
Re: Arrays zusammenfügen
Das erste Array mit SetLength auf die richtige Länge bringen, dann den Inhalt des zweiten mit CopyMemory rüberschnippsen. ;-)
|
Re: Arrays zusammenfügen
Zitat:
|
Re: Arrays zusammenfügen
So meinte ich das:
Delphi-Quellcode:
Mit Move müsste ich selber erst schauen wie das aussieht. ;-)
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])); |
Re: Arrays zusammenfügen
Hi,
So ginge das mit Move:
Delphi-Quellcode:
Ich hoffe ich hab keinen Fehler drin :stupid:
var old: Integer;
begin old := Length(ArrayB); SetLength(ArrayB,old+Length(ArrayA); Move(ArrayA[0],ArrayB[old],Length(ArrayA)*SizeOf(ArrayA[0])); end; |
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 |
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. |
Re: Arrays zusammenfügen
am besten so(Nicht getestet):
Delphi-Quellcode:
so müsste das eigentlich klappen.
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; |
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; |
AW: Arrays zusammenfügen
Und das gehtz so?
Der offene Var-Array-Parameter (
Delphi-Quellcode:
) schlägt (bei mir) späterens beim SetLength fehl, mit "[DCC Fehler] E2008 Inkompatible Typen".
var _alleStrings:Array of String
Denn ein varianter Arrayparameter ist nicht wie ein "normales" Array aufgebaut. Vermutlich sind das hier alles nur Zeiger auf die Daten des originalen Arrays und man hat keinen direkten Zugriff auf die Array-Verwaltung dieses Arrays. Mit einem typisierten Array-Parameter ginge das aber. |
AW: Arrays zusammenfügen
Lustig, wie man bei einer OOP-Sprache und im 21,Jahrhundert versucht, Daten in einem primitiven Datentyp (Array) zu halten und sich über jetzt zwei Seiten einen abbricht, diese zu konkatenieren, anstatt es naheliegend über eine TStringList zu realisieren, die im Übrigen entgegen aller Unkenrufe so langsam gar nicht ist.
|
AW: Arrays zusammenfügen
Zum Üben und damit man Lernt was Daten sind und wie man sie verwaltet, isses doch nicht schlecht?
Die TStringList macht Intern auch nichts viel Anders. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz