Record oder Object, TList oder Array, ...

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Eclipticon
Beiträge: 292
Registriert: Sa 5. Feb 2011, 20:38
OS, Lazarus, FPC: Windows XP VirtualBox (FPC 2.6.4, Laz 1.2.4)
CPU-Target: 32Bit
Wohnort: Wien

Record oder Object, TList oder Array, ...

Beitrag von Eclipticon »

Schoenen Abend,

ich moechte fuer ein Projekt eine Reihe von Datensaetzen verwalten, die etwa so aussehen:

Code: Alles auswählen

TSomething
  ID: cardinal
  Key: cardinal
  Modifier: cardinal
  Flag: boolean
Abgesehen davon, dass beim Entstehen und beim Entfernen jedes dieser Datensaetze Code ausgefuehrt wird, passiert da nicht viel ... ich wuerde also einen record draus machen. Gibt es aus Sicht erfahrenerer Programmierer irgendeinen Vorteil, wenn ich das ganze in eine von TObject abgeleitete Klasse packe? Der angesprochene Code kaeme halt dann in den Constructor und Destructor ...

Ich muss zudem eine Reihe dieser Elemente verwalten. Ich muss dafuer
  • Elemente hinzufuegen
  • Nach Elementen mit einem bestimmten Key suchen
  • Eventuell einzelne Elemente loeschen
  • Alle Elemente loeschen
koennen ... wuerdet ihr fuer einen Record oder ein Object eher ein dynamisches Array oder eine TList oder was auch immer zur Verwaltung vorschlagen?

Mich interessiert natuerlich auch, welche Vor- und Nachteile ihr in Euren Loesungen seht ...

Danke!

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Record oder Object, TList oder Array, ...

Beitrag von MAC »

für das vorgeschlagene TSomething würd ich ein Record verwenden, der einfachhalt halber. TObject kann man aber auch machen :)
Ich würde ein Dynamischen Array nehmen , da es einfache aufgaben sind die du damit erledigegst. Eine TList , wenn du willlst kannst du die auch verwenden, die speichert es intern ja auch in nem array nur musst du dann TObject verwenden und mit den Pointern aufpassen.

Allerdings könntest du das gesammte Ergebnis in ein TObject packen, also
TEverything = class
public
was:array of tSomething;
function Suche(acardinal:cardinal):cardinal;
end;

weil man damit einfach mehrere dieser datensätze gleichseitig verwenden kann.

Also bei diesem problem würde ich sagen kommt es drauf an womit du lieber programmierst :), du machst also keine fatel fehler wenn du jetzt nicht genau die kombination nimmst...

Code: Alles auswählen

Signatur := nil;

Maik81ftl
Beiträge: 619
Registriert: Mi 9. Mär 2011, 16:34
OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
CPU-Target: 64Bit
Wohnort: seit 01.06.2011 in Wahlstedt

Re: Record oder Object, TList oder Array, ...

Beitrag von Maik81ftl »

Eclipticon hat geschrieben:Schoenen Abend,

ich moechte fuer ein Projekt eine Reihe von Datensaetzen verwalten, die etwa so aussehen:

Code: Alles auswählen

TSomething
  ID: cardinal
  Key: cardinal
  Modifier: cardinal
  Flag: boolean
Abgesehen davon, dass beim Entstehen und beim Entfernen jedes dieser Datensaetze Code ausgefuehrt wird, passiert da nicht viel ... ich wuerde also einen record draus machen. Gibt es aus Sicht erfahrenerer Programmierer irgendeinen Vorteil, wenn ich das ganze in eine von TObject abgeleitete Klasse packe? Der angesprochene Code kaeme halt dann in den Constructor und Destructor ...

Ich muss zudem eine Reihe dieser Elemente verwalten. Ich muss dafuer
  • Elemente hinzufuegen
  • Nach Elementen mit einem bestimmten Key suchen
  • Eventuell einzelne Elemente loeschen
  • Alle Elemente loeschen
koennen ... wuerdet ihr fuer einen Record oder ein Object eher ein dynamisches Array oder eine TList oder was auch immer zur Verwaltung vorschlagen?

Mich interessiert natuerlich auch, welche Vor- und Nachteile ihr in Euren Loesungen seht ...

Danke!
Nun wenn du nur die TSomething verwalten willst, würd ich sagen Record,

Dann habe ich dein List gesehen. dahingehend würde ich dir raten das TSomething als Record laufen zu lassen. Dies sollte dann so aussehen,

Code: Alles auswählen

TSomething = Record
  ID: cardinal;
  Key: cardinal;
  Modifier: cardinal;
  Flag: boolean;
end;
dann eine Klasse für das List, was du beschrieben hast.

Wenn du dann noch ein Datensatz in beliebiger Höhe wünscht entweder das Typ ändern oder eine "File" anlegen

Typ ändern würde dann so aussehen,

Code: Alles auswählen

TSomething = Array of Record
  ID: cardinal;
  Key: cardinal;
  Modifier: cardinal;
  Flag: boolean;
end;
Variante 2 häng ich dir eine File in den Anhang. Aber Beachte, Dieses Code hab ich selber von einem Forum User erhalten.
Dateianhänge
udata.pas
(3 KiB) 77-mal heruntergeladen
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache :D und der Kreis Segeberg meine LIEBE :D

u-boot
Beiträge: 308
Registriert: Do 9. Apr 2009, 10:10
OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 785..

Re: Record oder Object, TList oder Array, ...

Beitrag von u-boot »

Maik81ftl hat geschrieben:

Code: Alles auswählen

TSomething = Array of Record
  ID: cardinal;
  Key: cardinal;
  Modifier: cardinal;
  Flag: boolean;
end;
funktioniert das ? (sry hab grad kein lazarus zur hand)

ich würde eher folgendermaßen:

Code: Alles auswählen

Tsomething = Record
  ID: cardinal;
  Key: cardinal;
  Modifier: cardinal;
  Flag: boolean;
end;
//...
var
MyArrVar: Array of Tsomething
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)

Maik81ftl
Beiträge: 619
Registriert: Mi 9. Mär 2011, 16:34
OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
CPU-Target: 64Bit
Wohnort: seit 01.06.2011 in Wahlstedt

Re: Record oder Object, TList oder Array, ...

Beitrag von Maik81ftl »

u-boot hat geschrieben:
Maik81ftl hat geschrieben:

Code: Alles auswählen

TSomething = Array of Record
  ID: cardinal;
  Key: cardinal;
  Modifier: cardinal;
  Flag: boolean;
end;
funktioniert das ? (sry hab grad kein lazarus zur hand)

ich würde eher folgendermaßen:

Code: Alles auswählen

Tsomething = Record
  ID: cardinal;
  Key: cardinal;
  Modifier: cardinal;
  Flag: boolean;
end;
//...
var
MyArrVar: Array of Tsomething
Sollte beides das Selbe sein, aber deine ist Sicherer.
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache :D und der Kreis Segeberg meine LIEBE :D

Antworten