AGB  ·  Datenschutz  ·  Impressum  







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

Variablen - Größte daraus finden

Ein Thema von rawsoul · begonnen am 15. Apr 2007 · letzter Beitrag vom 15. Apr 2007
 
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#10

Re: Variablen - Größte daraus finden

  Alt 15. Apr 2007, 15:09
Hallo,

hier eine mögliche Lösung, die auf marabus Vorschlag basiert:

Delphi-Quellcode:
type
  TCounterList = class (TStringList)
  private
    function GetCounter (const aName: string): Cardinal;
    procedure SetCounter (const aName: string; aValue: Cardinal);
  public
    function CountByIndex (aIndex: Integer): Cardinal;
    procedure SortByCount;
    property Counter [const aName: string]: Cardinal
      read GetCounter write SetCounter;
  end;

function CompareCount (List: TStringList; Index1, Index2: Integer): Integer;
begin
  with TCounterList(List) do
    Result := CountByIndex(Index2) - CountByIndex(Index1); // umgekehrte Sortierung
end;

function TCounterList.GetCounter (const aName: string): Cardinal;
begin
  Result := CountByIndex(IndexOf(aName));
end;

function TCounterList.CountByIndex (aIndex: Integer): Cardinal;
begin
  if ((aIndex >= 0) and (aIndex < Count)) then
    Result := Integer(Objects[aIndex])
  else
    Result := 0;
end;

procedure TCounterList.SetCounter (const aName: string; aValue: Cardinal);
var
  k : Integer;
begin
  k := IndexOf(aName);
  if (k < 0) then
    k := Add(aName);
  Objects[k] := TObject(aValue);
end;

procedure TCounterList.SortByCount;
begin
  CustomSort (CompareCount);
end;
Die Anwendung könnte so aussehen:

Delphi-Quellcode:
const
  FMT_Rang = 'Rang %d: %s (Anzahl=%d)';
  FMT_Haus = 'Häuser: %d';
  FMT_Tier = 'Tiere: %d';
var
  List : TCounterList;
begin
  List := TCounterList.Create;

  List.Counter['Haus'] := 200;
  List.Counter['Baum'] := 50;
  List.Counter['Auto'] := 114;
  List.Counter['Person'] := 14;
  List.Counter['Blume'] := 344;
  List.Counter['Tier'] := 9;

  List.SortByCount;

  Memo1.Clear;
  Memo1.Lines.Add(Format(FMT_Rang, [1, List[0], List.CountByIndex(0)]));
  Memo1.Lines.Add(Format(FMT_Rang, [2, List[1], List.CountByIndex(1)]));
  Memo1.Lines.Add(Format(FMT_Rang, [3, List[2], List.CountByIndex(2)]));
  Memo1.Lines.Add('');
  Memo1.Lines.Add(Format(FMT_Haus,[List.Counter['Haus']]));
  Memo1.Lines.Add(Format(FMT_Tier,[List.Counter['Tier']]));

  List.Free;
end;
Wer es ganz sauber mag, der leitet nicht von TStringList ab, sondern verwendet eine lokale Instanz der Stringliste in der TCounterList-Klasse. Damit können nur die benötigten Methoden und Eigenschaften nach außen sichtbar gemacht werden.

Gruß Hawkeye
  Mit Zitat antworten Zitat
 


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:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz