Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: Welchen Typ für mehrdimensionalen Buffer verwenden?

  Alt 10. Nov 2006, 16:47
Hi,
ich bin mir nicht ganz sicher, ob ich alles richtig verstanden habe. Ehrlich gesagt sehe ich nämlich nicht ganz den Grund, warum du drei StringListen verwaltest.

Wenn ich alles richtig verstanden habe, dann bekommst du eine bestimmte Anzahl n von Daten, die du um zwei weitere Informationen erweiterst. Jedes Datum wird einfach in einer Warteschlange abgelegt und irgendwer kümmert sich dann von Zeit zu Zeit mal um die Schlange.
Das ganze spricht eigentlich mehr dafür, dass du einen Datentypen benutzt, der sich aus den drei einzelnen Informationen zusammensetzt. Immerhin gehört die Benutzer-Information und die Zeitangabe zu dem Datum, dass empfangen wurde.
Deshalb einfach einen Datentypen erstellen, der die entsprechende Form hat (ich bleib mal hier bei Strings, kannst du aber natürlich beliebig anpassen):
Delphi-Quellcode:
type
  TInput = record
    user : String;
    data : String;
    Time : String;
  end;
Was du nun eigentlich suchst wäre dann eine Struktur um eine Menge dieser Daten zu verwalten. Es bietet sich hier im übrigen der Datentyp einer (Warte-)Schlange/Queue an. Wie Listen ist das ein abstrakter Datentyp, du kannst ihn z.B. durch eine Liste realisieren. Die einfache Idee ist, dass du FirstIn-FirstOut realisierst. Es gibt eine Möglichkeit für dich ein Datum anzuhängen, zu schauen wie viele Elemente in der Liste sind und wenn sich mindestens ein Element in der Liste befindet, kannst du das erste Element entfernen.
Es kommen natürlich noch andere Möglichkeiten in Frage, aber die hier sollte es schon sehr gut tun. Wie gesagt, der Datentyp ist abstrakt, du kannst dir hier also selbst überlegen ob und wie du den implementieren möchtest.
An sich kannst du eigentlich sehr direkt mit einem TList Objekt arbeiten. Eine TList ist eine einfache Form von Liste, die dir alles mögliche schon ermöglicht. Du hast sogar einen Wahlfreien Zugriff auf einzelne Elemente (intern wird ein Array verwendet).

Eigentlich musst du nur ein TInput erzeugen und mittels der Add Funktion an die Liste anhängen. Beim entfernen musst du noch casten (Listen speichern nur allgemeine Zeiger), fertig.
Etwas schöner geht das ganze noch, wenn du statt einem Record eine Klasse erzeugst. Diese kannst du dann in einer TObjectList verwalten. Der größte Vorteil liegt dann darin, dass die TObjectList auch alle Instanzen frei geben kann, wenn sie zerstört wird, bei einer TList musst du dich selbst drum kümmern.

Gruß Der Unwissende
  Mit Zitat antworten Zitat