AGB  ·  Datenschutz  ·  Impressum  







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

Array-Element löschen

Ein Thema von Taladan · begonnen am 12. Jun 2005 · letzter Beitrag vom 14. Jun 2005
Antwort Antwort
Seite 2 von 2     12   
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#11

Re: Array-Element löschen

  Alt 13. Jun 2005, 09:13
Wenn Du Move verwendest, geht es noch schneller und ist weniger Code = weniger anfällig:
Delphi-Quellcode:
procedure TFeldliste.DeleteField(Index: Integer);
var i,l : integer;
begin
  L := length(FListe);
  if index < L-1 Then
    move (fListe[Index + 1], fListe [Index], SizeOf (Fliste[0])* (L - Index - 1));
  setlength(Fliste, length(fliste)-1);
End;
Aber ehrlich, ich verstehe nicht, was hier viele 'Experten' gegen eine TList haben. Das ist doch schnell genug und macht das alles schon. Ich kenne nicht allzuviele Anwendungen, die so zeitkritisch sind, das man sich ein TExtremelyFastList bauen müsste.

Wenn ich die vorgefertigten Klassen von Delphi nehme, habe ich doch ein paar Sorgen weniger, weil das schonmal funktioniert... Und wenn ich Performanceprobleme bekomme, dann nehme ich mir einen Profiler. Der zeigt mir die Bottlenecks. Wenn TList der Bösewicht ist, wird ausgetauscht. Aber nur dann...
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#12

Re: Array-Element löschen

  Alt 13. Jun 2005, 09:15
Zitat von r2c2:
Zitat von Robert_G:
TList selbst ist ja auch nur ein Array, nur halt in einer verwendbaren Kapselung...
Wirklich? Ich dachte immer n List funktioniert über Pointer: Jedes Item hat n Pointer auf das vorherige und das nächste...
TList ist KEINE linked List!

@Topic
Das geht so:TObjectList.Remove(DeinObject); Damit wird es auch automatisch freigegeben, solange OwnsObjects True ist. (In meinem BeispielCode ist es True. )
Falls du nur über Index darauf zugreifst könnte man sich eine Ankürzung machen und das hier noch hinzufügen:
Delphi-Quellcode:
   TFeldDingslist = class(TObjectList)
   ...
   public
   ...
      procedure Remove(aIndex: Integer); virtual;
   ...
implementation
...
procedure Remove(aIndex: Integer);
begin
   Remove(Items[aIndex]);
end;
  Mit Zitat antworten Zitat
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#13

Re: Array-Element löschen

  Alt 13. Jun 2005, 11:19
[quote="Robert_G"]
Zitat von r2c2:
Zitat von Robert_G:
TList selbst ist ja auch nur ein Array, nur halt in einer verwendbaren Kapselung...
Wirklich? Ich dachte immer n List funktioniert über Pointer: Jedes Item hat n Pointer auf das vorherige und das nächste...
TList ist KEINE linked List!
quote]
Gut, dann hab ich wirklich was verpeilt. Das muss ich mir dann nochmal angucken.

mfg

Christian
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#14

Re: Array-Element löschen

  Alt 13. Jun 2005, 21:00
Zitat von alzaimar:
Aber ehrlich, ich verstehe nicht, was hier viele 'Experten' gegen eine TList haben. Das ist doch schnell genug und macht das alles schon. Ich kenne nicht allzuviele Anwendungen, die so zeitkritisch sind, das man sich ein TExtremelyFastList bauen müsste.
Moin,
ich glaube hier hat keiner was gegen TList gesagt, außer ich in der letzten Zeile des Beitrages hinter dem Link.
Ich habe eigentlich nur aus 2 Gründen etwas gegen TList a) sie steht in Classes.pas und b) sie hat ihre Methoden nicht virtual.
Ich selbst verwende sie nicht sondern eigene Implementierungen, die auf entweder Array oder Listen bzw. Baum -basiert sind.
Da ich diese aber nicht rausrücken will ( ) denke ich dass eine TList-Ableitung hier prima ihren Job erfüllt.
  Mit Zitat antworten Zitat
Marphy

Registriert seit: 24. Feb 2005
162 Beiträge
 
Delphi 7 Professional
 
#15

Re: Array-Element löschen

  Alt 14. Jun 2005, 12:41
Hallo,

Zitat von alzaimar:
Und wenn ich Performanceprobleme bekomme, dann nehme ich mir einen Profiler. Der zeigt mir die Bottlenecks.
Mal wieder ein wenig OT, frage nur ganz kurz... Wo kann ich einen günstigen Profiler kaufen bzw. herunterladen? D.h. könnt ihr mir ein paar (Delphi-)Profiler nennen? Danke!

Gruß, Marco
Marco
Wo ein Wille ist, ist auch ein Weg. Aber wo ein Weg ist, ist nicht unbedingt auch ein Wille...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 05:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz