Einzelnen Beitrag anzeigen

Der_Unwissende

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

Re: TStringList - Anzahl der Wörter zählen

  Alt 27. Aug 2006, 14:30
Hi,
ich weiß zwar nicht genau warum OOP nicht dein Ding ist, aber da du nicht etwas generelles gegen Klassen hast (du verwendest ja eine TStringList) solltest du doch die Variante von Jens vorziehen.
An sich ist es natürlich sauberer ein Integer in einem Wrapper auch wirklich als Objekt zu übergeben. Klar, hier eine Referenz eh ein Integer, aber wenn Delphi mal etwas typsicherer wird...

Jedenfalls zeigt dir Jens Lösung, dass du mit einer Liste auskommst. Du hast eine Art Dictonary. Hier wird ein Tupel (Schlüssel, Wert) abgespeichert. Anhand von Schlüssel kannst du dir den gespeicherten Wert zurückgeben lassen. Wird die Liste z.B. sortiert, bleibt diese Zuordnung automatisch erhalten.
Wenn du hier noch ein THashedStringList verwendest (ein Nachfahre der TStringList) dürfte sich auch dir Perfomance noch einmal ordentlich verbessern.
Als einfaches Beispiel:

Delphi-Quellcode:
type
  TIntegerWrapper = class(TObject)
    private
      FValue : Integer;
    public
      Value : Integer read FValue write FValue;
  end;

...

procedure toList(const s : String; const List : TStringList);
var buffer : TIntegerWrapper;
begin
  if assigned(List) then
  begin
    if List.indexOf(s) > -1 then
    begin
      buffer := TIntegerWrapper(List.Objects[List.indexOf(s)]);
      buffer.Value := buffer.Value + 1;
    end

    else
    begin
      buffer := TIntegerWrapper.Create;
      buffer.Value := 1;
     
      List.AddObject(s, buffer);
    end;
  end;
end; // procedure toList(const s : String; const List : TStringList);
Hier siehst du, dass du mit einer Liste auskommst. Es ist jetzt egal was du mit der Liste machst, die Zuordnung String -> Anzahl würde immer erhalten bleiben (beim Einfügen, Löschen, Sortieren, ...). Mittels AddObject legst du einfach an der Stelle des Strings einen Verweis auf ein Objekt ab. Dieser Verweis bleibt immer erhalten. Wie man damit arbeitet hat dir Jens eigentlich schon gezeigt, hier ist einfach nur ein Wrapper zu gegekommen.

Gruß Der Unwissende
  Mit Zitat antworten Zitat