Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

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

  Alt 3. Okt 2006, 15:39
Hallo,

ich finde den TIntegerWrapper hier nicht so gut. Es gehört zu den best practices eines framework designers jeder Klasse eine tag property mitzugeben, wenn diese Klasse keine rein interne Funktion hat. Mal ist diese property eine Integer (Tag), mal ein Pointer (Data) und mal ein TObject. Es wurde jeweils der Typ gewählt, der am sinnvollsten erschien - alle anderen Typen müssen über einen type cast passend gemacht werden. Das ist nichts verwerfliches und es genügt, wenn der type cast geeignet gekapselt wird. Der Wrapper bringt in diesem konkreten Fall Mehraufwand, dem kein Nutzen gegenüber steht.

Delphi-Quellcode:
function GetCount(sl: TStrings; const s: String): Integer;
var
  index: Integer;
begin
  index := sl.IndexOf(s);
  if index < 0
    then Result := 0
    else Result := Integer(sl.Objects[index]);
end;

procedure SetCount(sl: TStrings; const s: String);
var
  index: Integer;
begin
  index := sl.IndexOf(s);
  if index < 0
    then sl.AddObject(s, Pointer(1))
    else sl.Objects[index] := Pointer(Succ(Integer(sl.Objects[index])));
end;

procedure TDemoForm.DemoButtonClick(Sender: TObject);
var
  sl: TStringList;
  i: Integer;
begin
  sl := TStringList.Create;
  sl.Sorted := True;
  sl.Duplicates := dupIgnore;

  SetCount(sl, 'so');
  SetCount(sl, 'oder');
  SetCount(sl, 'So');

  ListBox.Clear;
  for i := 0 to Pred(sl.Count) do
    ListBox.Items.Add(Format('%s = %d', [sl[i], GetCount(sl, sl[i])]));

  sl.Free;
end;
Grüße vom marabu
  Mit Zitat antworten Zitat