AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi StringList oder dynamisches Array.
Thema durchsuchen
Ansicht
Themen-Optionen

StringList oder dynamisches Array.

Ein Thema von MiKaEr · begonnen am 8. Feb 2012 · letzter Beitrag vom 10. Feb 2012
Antwort Antwort
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
905 Beiträge
 
Delphi 12 Athens
 
#1

AW: StringList oder dynamisches Array.

  Alt 9. Feb 2012, 06:41
Hinten ran hängen: Array besser
Warum ist da ein Array besser? Wenn das Array voll ist, und der Speicher nach dem letzten Eintrag anderweitig belegt ist, muss das Array komplett umkopiert werden. Eine Stringlist ist da besser geeignet, da dort das zugrundeliegende Array bei einem "Überlauf" direkt um 25% vergrößert wird (Eigenschaft Capacity), damit nachfolgende Einfügeoperationen schneller ausgeführt werden können.
Einfügen : StringList besser
Löschen : Stringlist besser
Da eine Stringlist ein Array kapselt, ist das egal. Umkopiert wird in jedem Fall.
Being smart will count for nothing if you don't make the world better. You have to use your smarts to count for something, to serve life, not death.
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#2

AW: StringList oder dynamisches Array.

  Alt 9. Feb 2012, 07:30
Hinten ran hängen: Array besser
Warum ist da ein Array besser?
Bei einem Array habe ich zwei Anweisungen (N++ und A[N] := S)
Bei einer Stringliste habe ich 4 (Alloc, Copy, N++ und A[N] := P). Eigentlich noch mehr, weil noch etwas mehr befüllt wird.

Von einem dynamischen und sich selbsttändig vergrößerden Array habe ich in Delphi noch nichts gehört.
Zitat:
Einfügen : StringList besser
Löschen : Stringlist besser
Da eine Stringlist ein Array kapselt, ist das egal. Umkopiert wird in jedem Fall.
Nein. Bei einer Stringlist werden Pointer bewegt, bei einem Array ganze Strings... Oder? Öh... Na ja egal, jedenfalls öhm... Sie verwirren mich.

Ach nee, ein String ist ja ein Pointer... Aber auf jeden Fall gibts noch bookkeeping. Vielleicht, oder?

Was solls: Teste einfach mal. Ich hab hier auf dem Nettbook kein Delphi.
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
905 Beiträge
 
Delphi 12 Athens
 
#3

AW: StringList oder dynamisches Array.

  Alt 9. Feb 2012, 08:11
Und das Array noch nicht ganz gefüllt ist, stimmt das, ja. Wenn aber Setlength aufgerufen werden muss, muss auch umkopiert werden. (Und weil man gelegentlich Fragen hört wie "Warum dauert for i := 0 to 100000 do setlength(myarray, length(myarray) + 1) so lange", weise ich da immer wieder gerne drauf hin. )

Bei der Stringlist wird das Setlength "intelligenter" aufgerufen, da die Kapazität (length) nicht nur um 1 erhöht wird, sondern um 25%. Damit kommt man amortisiert auch auf eine konstante Laufzeit zum Einfügen eines Elements. Wenn man capacity vor dem Füllen passend setzt, dürfte das Verhalten im Wesentlichen mit dem eines normalen Arrays übereinstimmen.

Dass beim Array ganze Strings kopiert werden, glaube ich auch nicht. Wie das intern genau funktioniert, weiß ich zwar nicht, aber ein "Array", bei dem jeder Eintrag eine andere Länge haben kann, würde das Ansprechen eines beleibigen Elements per Index etwas aufwändiger machen.
Being smart will count for nothing if you don't make the world better. You have to use your smarts to count for something, to serve life, not death.
  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 14:16 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