AGB  ·  Datenschutz  ·  Impressum  







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

Unbeschränkte Arrays?

Ein Thema von Seniman · begonnen am 9. Apr 2005 · letzter Beitrag vom 9. Apr 2005
Antwort Antwort
Benutzerbild von Seniman
Seniman

Registriert seit: 15. Sep 2003
Ort: Münster
98 Beiträge
 
#1

Unbeschränkte Arrays?

  Alt 9. Apr 2005, 16:28
Hallo,

diese Frage geht an Leute, die sich mit sauberer Programmierung auskennen.
Und zwar habe ich vor, ein Programm zu schreiben, bei dem es von einer bestimmten Objektsorte (Klasse oder Record) mehrere Objekte geben soll, wobei vorher nicht bekannt ist, wieviele, bzw. sich die Anzahl im Laufe des Programms ändert.
Ich habe das einmal mit verketteten Listen gemacht. Das hat gut funktioniert, ist aber ein wenig frickelei. Soweit ich gehört habe, kann man das auch mit Arrays machen, deren Größe nicht festgelegt ist.
Meine Frage: Wie würdet ihr das machen? Was ich "sauberer", sinnvoller. Und welche Methode bietet welche Vor-/Nachteile?

Grüße
Seniman
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#2

Re: Unbeschränkte Arrays?

  Alt 9. Apr 2005, 16:38
Das ganze kannst du mit dynamischen Arrays lösen:
Delphi-Quellcode:
var
  MeinArray: array of TMeinTyp;
//...
  setLength(MeinArray, 10); //Länge des Arrays auf 10 Elemente setzen
Wenn du aber die Länge des Arrays auf n setzt, gehen die Indexe der Elemente von 0 bis n-1!!

Wenn dus sauber nach OOP-Regeln erledigen willst, gibts eine eigene Klasse dafür
*gleich nachguck, wie die nochmal heißt....*

Edit: Guck dir im Fall mal Hier im Forum suchenTList oderHier im Forum suchenTObjectList an
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Unbeschränkte Arrays?

  Alt 9. Apr 2005, 20:30
Es gibt noch die Funktion High.

Sie erwartet als Parameter ein Array und gibt dessen höchstes Element zurück.

Dann musst du nicht mehr

for I:=0 to length(arr)-1 do

schreiben sondern

for I:=0 to high(arr) do
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Unbeschränkte Arrays?

  Alt 9. Apr 2005, 20:35
ich würde dir eine TList empfehlen, das ist intern mit arrays gelöst...
da macht man einfach nur Liste.Add(Pointer) und hat den pointer (auf das object/den record) in der liste... desweiteren gibts delete, move, exchange, clear....
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Unbeschränkte Arrays?

  Alt 9. Apr 2005, 20:37
Verbraucht aber wahrscheinlich auch mehr Speicherplatz im RAM, oder?
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Unbeschränkte Arrays?

  Alt 9. Apr 2005, 20:48
bestimmt da ja noch die klassen-konstrukte mit im speicher sind.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Unbeschränkte Arrays?

  Alt 9. Apr 2005, 21:20
Zitat von 3_of_8:
Verbraucht aber wahrscheinlich auch mehr Speicherplatz im RAM, oder?

Ja, aber nicht viel. Ein paar Bytes für das Objekt selbst, das wars.
Aber wichtig: Bei TList immer hintereinander .Add aufzurufen müllt den Speicher genauso zu wie bei dyn. Arrays ständig SetLength(arr, Length(arr)+1) aufzurufen.
Bei TList gibt es die Property Capacity, die die Kapazität, sprich die Größe des allozierten Speichers, festlegt.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Unbeschränkte Arrays?

  Alt 9. Apr 2005, 22:19
bei TList ist es aber eben so das nicht bei jedem add speicher reserviert wird sondern bei einem add wird immer gleich etwas mehr speicher reserviert so das nur bei jedem dritten oder 4ten add wirklich speicher allociert wird.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Unbeschränkte Arrays?

  Alt 9. Apr 2005, 22:22
Echt?
Ich hatte das anders in Erinnerung. Muss wohl mal wieder Delphi installieren und kucken
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Unbeschränkte Arrays?

  Alt 9. Apr 2005, 22:24
bei add wird "Grow" aufgerufen falls speicher benötigt wird. Und in Grow wird dann entsprechend "FCapacity" mehr speicher allociert als benötigt wird
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  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:55 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