![]() |
Array zusammenhängen
Hallo
Ich verwende folgende Funktion um ein bestendes Array zu erweitern:
Delphi-Quellcode:
Gibt es dafür noch eine elegantere Möglichkeit?
procedure TTest.FillArray(var aArray: tBestehendesArray; aValues: array of integer);
var TmpLen : integer; lp : byte; begin TmpLen := Length(aArray); SetLength(aArray,TmpLen+Length(aValues)); for lp:=0 to high(aValues) do aArray[TmpLen+lp] := aValues[lp]; end; |
Re: Array zusammenhängen
Hi,
es gibt auf jeden Fall eine deutlich schnellere:
Delphi-Quellcode:
CopyMemory ist dabei aus der Unit Windows.
procedure TTest.FillArray(var aArray: tBestehendesArray; aValues: array of integer);
var TmpLen : integer; lp : byte; begin TmpLen := Length(aArray); SetLength(aArray,TmpLen+Length(aValues)); copyMemory(@aArray[TmpLen], @aValues[0], sizeOf(aValues[0]) * length(aValues)); end; Gruß Der Unwissende |
Re: Array zusammenhängen
Hi, ich denke nicht, dass eine effizientere Implementierung sehr sinnvoll wäre, da du dir für das Aneinanderhängen von Daten sowieso eine schlecht geeignete Datenstruktur ausgesucht hast. Wenn du weißt, dass in diesem Array niemals mehr als ~100 Einträge liegen, brauchst du dir auch nicht weiter Gedanken darüber zu machen. Sind es (viel) mehr Einträge, nimm eine Datenstruktur, die zu deiner Aufgabe passt (Suchen? Sortieren? Aneinanderhängen? etc)
Gruß, Dani |
Re: Array zusammenhängen
Du könntest die Daten effektiver (=schneller) mit der Move Prozedure bewegen.
Aber Achtung: wäre das Array von Typ: array of string; wäre dies verboten. Deine Prozedure könnte so aussehen (ungetestet!!!):
Delphi-Quellcode:
Bei Verwendung von Move muss man höchste Vorsicht walten lassen, damit kein Speicher "zerschossen" wird.
procedure AppendArray(var aArray: TIntegerArray; aValues: TIntegerArray);
var TmpLen : integer; lp : byte; begin TmpLen := Length(aArray); SetLength(aArray,TmpLen+Length(aValues)); Move(aValues[0], aArray[TmpLen], Length(aValues)*sizeof(Integer)); end; PS: ich habe den Namen der Procedure geändert; ist so deutlich sprechender |
Re: Array zusammenhängen
Hi !
Kleine Änderung spart Berechnung innerhalb der Schleife !
Delphi-Quellcode:
procedure TTest.FillArray(var aArray: tBestehendesArray; aValues: array of integer);
var TmpLen : integer; lp : byte; begin TmpLen := Length(aArray); SetLength(aArray,TmpLen+Length(aValues)); for lp:=TmpLen to TmpLen+high(aValues) do aArray[lp] := aValues[lp]; end; |
Re: Array zusammenhängen
Zitat:
|
Re: Array zusammenhängen
Danke an alle! Ich werde in dem Fall Move verwenden. :cheers:
|
Re: Array zusammenhängen
Zitat:
Was die Move Prozedur angeht, so greift CopyMemory auch nur auf Move zurück, also ist Move hier noch etwas flinker. [ADD] Sorry, kein roter Kasten, komisch [/ADD] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:44 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