Zitat von
Meflin:
Im Moment verlangsamt o.g. Ansatz den Vorgang ca. um den Faktor 50
Fallst Du mit 'o.g.Ansatz' das meinst, was Christian vorgeschlagen hat, dann hast Du was falsch gemacht.
Die werden vorne immer rangebepselt? Hmm.
Delphi-Quellcode:
// 1. Maximal mögliche Länge ausrechnen
MaxLength := (High(FNodes) - Low(FNodes) + 1)*MaxLengthOfElementList;
SetLength (Result, MaxLength);
// 2. Das Zeugs am Ende von Result beginnend nach vorne auffüllen
j := MaxLength+1;
for i := Low(FNodes)
to High(FNodes)
do begin
// Einzufügenden String holen
sTmp := FNodes[i].ElementList[FNodes[i].IncCount];
If Length (sTmp)>0
Then Begin // wenn der nicht leer ist
// Einfügeposition nach vorne schieben
dec (j,Length (sTmp));
// String vorne ranbepseln
Move (s[1], Result[j], Length (sTmp));
End
End;
// Wenn wir noch nicht vorne angekommen sind, verschieben wir unser Resultat an Position 1.
If j>1
Then Begin
Dec (MaxLength, j-1);
// Länge anpassen
Move (Result[j], Result[1], MaxLength);
// Verschieben
End;
SetLength (Result, MaxLength);
// Fertig.
Ungetestet, vielleicht die üblichen +/-1 Fehler. Sollte aber weeesentlich schneller sein.