AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dynamische Arrays "verketten"

Ein Thema von Dennis07 · begonnen am 3. Feb 2015 · letzter Beitrag vom 6. Feb 2015
Antwort Antwort
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.961 Beiträge
 
Delphi 12 Athens
 
#1

AW: Dynamische Arrays "verketten"

  Alt 6. Feb 2015, 12:34
Wäre schön wenn sich jemand findet der nach asm übersetzt
Das habe ich früher öfter mal gemacht, zuerst nur für 32-Bit, dann auch für 64-Bit und nun auch noch für ARM, und solange man eine reine Pascal Umsetzung dazu packt (sprich 4 Implementierungen macht...), ist das auch kein Problem. Aber angesichts immer mehr Plattformen optimiere ich lieber nur noch die Pascal Implementierungen, wenn es nicht wirklich eine konkrete Notwendigkeit zur extremen Optimierung gibt.
Sebastian Jänicke
AppCentral

Geändert von jaenicke ( 6. Feb 2015 um 12:36 Uhr)
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Dynamische Arrays "verketten"

  Alt 6. Feb 2015, 12:38
No problem Sebastian. Könntest du eventuell mal bitte in deinem XE7 einen Durchlauf mit Umlauten und IngnoreCase machen?
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.811 Beiträge
 
Delphi 12 Athens
 
#3

AW: Dynamische Arrays "verketten"

  Alt 6. Feb 2015, 13:22
Bin ich eigentlich zu einfach gestrickt? Fragestellung: Wie hänge ich ein Integer Array an ein anderes?
Lösung: auf keinen Fall diese seitenlangen Stringkopierorgien.
Sherlocks dumme KISS-Lösung:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  IntArr1: TIntegerArray;
  IntArr2: TIntegerArray;
  i:Integer;
  Output: string;
begin
  SetLength(IntArr1, 5);
  IntArr1 := [1,2,3,4,5];
  SetLength(IntArr2, 3);
  IntArr2 := [6,7,8];
  AppendIntArray(IntArr1, IntArr2);

  Output := '';
  for i := 0 to Length(IntArr1)-1 do
    Output := Output + IntToStr(intarr1[i]);
  ShowMessage(output);
end;

procedure TForm1.AppendIntArray(var IntArr1: TIntegerArray; IntArr2: TIntegerArray);
var
  i: Integer;
  origLen: Integer;
begin
  origLen := Length(IntArr1);
  SetLength(IntArr1, Length(IntArr1) + Length(IntArr2));
  for i := 0 to Length(IntArr2) - 1 do
  begin
    IntArr1[origLen + i] := IntArr2[i];
  end;
end;
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#4

AW: Dynamische Arrays "verketten"

  Alt 6. Feb 2015, 13:49
Bin ich eigentlich zu einfach gestrickt? Fragestellung: Wie hänge ich ein Integer Array an ein anderes?
Lösung: auf keinen Fall diese seitenlangen Stringkopierorgien.
Diese Stringkopierorgien haben ja nicht mit der Frage zu tun, sondern wie man die Funktion verändern könnte, in der die Notwendigkeit der Array-Verkettung vorgekommen ist.


Delphi-Quellcode:
procedure TForm1.AppendIntArray(var IntArr1: TIntegerArray; IntArr2: TIntegerArray);
var
  i: Integer;
  origLen: Integer;
begin
  origLen := Length(IntArr1);
  SetLength(IntArr1, Length(IntArr1) + Length(IntArr2));
  for i := 0 to Length(IntArr2) - 1 do
  begin
    IntArr1[origLen + i] := IntArr2[i];
  end;
end;
Nimm die Schleife heraus und mache es mit "Move" so wie in #9 bereits schon beschrieben.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#5

AW: Dynamische Arrays "verketten"

  Alt 6. Feb 2015, 13:55
Bjoerk: Vergleich deine Lösung doch mal spaßeshalber mit der von mir verlinkten Lösung

http://www.delphipraxis.net/105562-f...entierung.html

Probier mal, welche schneller ist.
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.811 Beiträge
 
Delphi 12 Athens
 
#6

AW: Dynamische Arrays "verketten"

  Alt 6. Feb 2015, 14:08
@BadenPower: Ganz ehrlich? Das war mir viel zu kompliziert, und wenn da mit Charactern hantiert wird, wo es um Integer geht, verliere ich ohnehin den Faden. Move ist ausserdem inhärent unsicher (einfach mal Embarcaderos nächste Typredefinition abwarten, und schon knallt das Ding). Wieso ist also die Schleife schlecht? 5 ms langsamer bei 400000 Array-Elementen? Wir wissen doch gar nicht wie groß die in Frage kommenden Arrays sind. Andererseits hat der TE jetzt richtig viel gelernt.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Dynamische Arrays "verketten"

  Alt 6. Feb 2015, 14:39
Bjoerk: Vergleich deine Lösung doch mal spaßeshalber mit der von mir verlinkten Lösung

http://www.delphipraxis.net/105562-f...entierung.html

Probier mal, welche schneller ist.
Hi Bud. Hab ich schon. Dort ist übrigens die CharVariante falsch. Meine wird mit zunehmender Länge des Substrings schneller. Und, die FastPos ist langsamer als z.B. die asm PosEx von D2007. Testet du mal wegen der Umlaute?

Edit: Vergiß es. Seehe gerade du hast D7. Bräuchte jemend mit >= 2009

Geändert von Bjoerk ( 6. Feb 2015 um 14:55 Uhr) Grund: Edit:
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#8

AW: Dynamische Arrays "verketten"

  Alt 6. Feb 2015, 17:36
Die haben ja irgendwann die FastCode-Teile in die RTL übernommen, daran wird das liegen.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:21 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