AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Array mit Recordinhalten löschen

Ein Thema von Mojito · begonnen am 30. Nov 2012 · letzter Beitrag vom 3. Dez 2012
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#1

AW: Array mit Recordinhalten löschen

  Alt 2. Dez 2012, 15:45
Irgendwie seltsam, dass Delphi Programmierer so blind sind und immer nur Arrays sehen wo in anderen Programmiersprachen (z.B. Python, C#,...Lisp!) schon längst Listen verwendet werden.

Arrays und Listen sind sich sehr ähnlich, aber nur aus Listen kann man schmerzfrei Elemente löschen.
Intern können Listen auch über Arrays nachgebildet werden aber entscheidend ist was dem Programmierer als API angeboten wird:

(dynamische) Arrays
* Wahlfreier Zugriff auf Elemente (über Index)
* nachträgliches Vergrössern/Verkleinern des Array

Listen
* Wahlfreier Zugriff auf Elemente (über Index und Inhalt)
* automatisches Vergrössern/Verkleinern der Liste
* Löschen von Elementen (ohne das Löcher zurückbleiben)
* Einfügen von Elementen an beliebiger Stelle
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#2

AW: Array mit Recordinhalten löschen

  Alt 2. Dez 2012, 16:13
Vor allem spätestens sein TObjectList (k. A. ab welchem Delphi). Wobei TList auch nicht viel komplizierter ist, aber TObjectList macht es endgültig Kinderleicht.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.659 Beiträge
 
Delphi 12 Athens
 
#3

AW: Array mit Recordinhalten löschen

  Alt 2. Dez 2012, 16:16
Dann muss man aus dem Record aber erst einmal eine Klasse machen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#4

AW: Array mit Recordinhalten löschen

  Alt 2. Dez 2012, 16:30
Also bei dem oberen Beispiel wäre es kein Akt. record gegen class tauschen, auf property verzichten, der Rest mit TObjectList.

Oder etwas aufwändiger - eine Klasse ableiten.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.659 Beiträge
 
Delphi 12 Athens
 
#5

AW: Array mit Recordinhalten löschen

  Alt 2. Dez 2012, 17:45
Oder je nach Delphi-Version eine generische Liste (ich wundere mich, dass das noch niemand vorgeschlagen hat).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#6

AW: Array mit Recordinhalten löschen

  Alt 2. Dez 2012, 18:11
Irgendwie seltsam, dass Delphi Programmierer so blind sind und immer nur Arrays sehen wo in anderen Programmiersprachen (z.B. Python, C#,...Lisp!) schon längst Listen verwendet werden.
Arrays sind schneller und wenn ich die Schmerzfrei-Lösch-Funktionalität nicht brauche, hänge ich mir keine Liste ans Bein. Warum auch?

Im Übrigen kann man auch mit FaustkeilenArrays trefflich und performant Elemente löschen. Vor allen Dingen kann man damit eins: Lernen, wie es geht.
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#7

AW: Array mit Recordinhalten löschen

  Alt 2. Dez 2012, 21:22
Arrays sind schneller und wenn ich die Schmerzfrei-Lösch-Funktionalität nicht brauche, hänge ich mir keine Liste ans Bein. Warum auch?
Wie ich schon gesagt habe, viele Delphi Entwickler sind einfach blind gegenüber Techniken die sich in anderen Programmiersprachen schon längst durchgesetzt haben.
Delphi-Quellcode:
 // a.)
// löschen eines Elements in einem Array
var
  i, x : integer;
begin
  x := 4; // Element Position die gelöscht werden soll
  for i:= x+1 to High(MyArray) do
  begin
    MyArray[i-1] := MyArray[i];
  end;
  SetLength(MyArray, Length(MyArray)-1);
end;

// b.)
// und jetzt das Gleiche mit einer Liste
MyList.Delete(4);
Und jetzt stelle man sich vor, dass man 5 versch. Arrays bzw. Listen hat.
Welcher Lösung wäre zu bevorzugen 5 * a.) oder 5 * b.) ?
Den Code bei a.) habe einfach so hingeschrieben; es ist gut möglich
dass er Fehler hat.
(Es sind übrigens min. 2 Fehler enthalten - wer findet sie?)
Bei b.) ist es ausgeschlossen, dass ein Fehler enthalten ist.
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#8

AW: Array mit Recordinhalten löschen

  Alt 2. Dez 2012, 21:28
Ich verwende auch in C# Arrays, wenn mir das reicht, insofern bin ich kein blinder Delphi-Entwickler.

Übrigens lösche ich in Arrays, in dem ich z.B. das letzte Element in den zu löschenden Index kopiere, die Anzahl verringere und freue mich, das ich das in O(1) hinbekommen habe.

Aber Du musst schon genau lesen, was ich schreibe. Wenn ich nicht löschen muss, sondern z.B. nur einen Container für ein paar Dinger brauche, nehme ich ein Array. Sonst etwas anderes. Eine Liste nehme ich selten, eher eine Map, Dictionary oder whatever.
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#9

AW: Array mit Recordinhalten löschen

  Alt 2. Dez 2012, 23:27
Übrigens lösche ich in Arrays, in dem ich z.B. das letzte Element in den zu löschenden Index kopiere, die Anzahl verringere und freue mich, das ich das in O(1) hinbekommen habe.
Wenn man so mit Arrays arbeitet, hat mal schon fast eine Speicherverwaltung mit fester Blocklänge.
Wenn man eine direkte Freiblockliste anstellen eines "Pegelstands" verwendet, kann man sogar auf das potenziell aufwendige Kopieren des letzten Elements verzichten
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.

Geändert von BUG ( 2. Dez 2012 um 23:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.381 Beiträge
 
Delphi 12 Athens
 
#10

AW: Array mit Recordinhalten löschen

  Alt 3. Dez 2012, 01:31
Gerade für die Datensicherheit beim Bearbeiten von Arrays hab ich endlich mal einen Vorschlag gemacht. (darf man gerne für voten)
http://qc.embarcadero.com/wc/qcmain.aspx?d=110391
Die schnelleren Zugriffe über Move und Co. sind da ja schonmal ganz schön fehleranfällig.

Derartige Codes kann man aber auch schon in älteren Delphis nutzen, außer daß man sich dort die Funktionen für jeden Arraytypen einzeln implementieren müste/sollte.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 3. Dez 2012 um 01:34 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 08:15 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