AGB  ·  Datenschutz  ·  Impressum  







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

array of X - Suche nach Element

Offene Frage von "peter001"
Ein Thema von peter001 · begonnen am 26. Nov 2009 · letzter Beitrag vom 26. Nov 2009
 
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.746 Beiträge
 
Delphi 12 Athens
 
#5

Re: array of X - Suche nach Element

  Alt 26. Nov 2009, 19:24
warum das globale var QueryCache: TQueryCache; ?

die Konstruktoren kannst du dir sparen
- dynamische Array und String sind per Standard eh leer

leere Destruktoren/Funktionen sind ebenfalls sinnlos

getCached liefert einen undefinierten Wert, wenn nichts im Cache ist

if Length(entries) > 0 then in isCached bringt auch nichts, denn dieses ist praktisch in der Forschleife schon vorhanden.

Try-Except ... eine dort auftretende Exception sollte man nicht einfach unter den Tisch kehren, denn dieses würde auf eine defekte Datenstruktur hinweisen und sowas dürfte eh nie auftreten

Vergleiche mit =true macht man nicht
(es sei denn man muß GENAU auf True(1) vergleichen)

Delphi-Quellcode:
unit QCache;

interface

uses
  ..., QCacheEntry;

type
  TQueryCache = class(TObject)
  private
    entries: array of TQueryCacheEntry;
  public
    function isCached(name: string; var pos:integer): boolean;
    function getCached(pos: integer): TQueryCacheEntry;
    procedure addEntryToCache(Charinfo: TQueryCacheEntry);
    function getNumEntries: integer;
  end;

implementation

function TQueryCache.getNumEntries: integer;
begin
  Result := Length(entries);
end;

function TQueryCache.getCached(pos: integer): TQueryCacheEntry;
begin
  //if Assigned(entries[pos]) then
  // Result := entries[pos]
  //else
  // Result := nil;

  // gekürzt kommt das bei raus und nebenbei wird nun nur noch einmal gesucht :)
  Result := entries[pos];
end;

function TQueryCache.isCached(name:string; var pos:integer):boolean;
var
  i: integer;
begin
  Result := false;
  for i := 0 to Length(entries)-1 do
    if entries[i].option1 = name then
    begin
      Result := true;
      pos := i;
      break; // wenn gefunden, dann braucht man nicht weitersuchen
    end;
end;

procedure TQueryCache.addEntryToCache(Charinfo: TQueryCacheEntry);
begin
  SetLength(entries,Length(entries)+1);
  entries[High(entries)] := Charinfo;
end;

end.
Delphi-Quellcode:
unit QCacheEntry;

interface

type
  TQueryCacheEntry = class(TObject)
    option1: string;
    option2: string;
    option3: string;
    option4: string;
    option5: string;
    option6: string;
  end;

implementation

end.
Delphi-Quellcode:
procedure TForm1.testName(name:string);
var
  ...
  qpos: integer;
  Charinfo: TQueryCacheEntry;
begin
  qpos := 0;

  if Cache.isCached(name, qpos) then
  begin
    ListBox1.Items.Add('Found Object in cache: ' + name + ' in Position: ' + IntToStr(qpos) + ' and total cache size: ' + IntToStr(Cache.getNumEntries));
    Charinfo := Cache.getCached(qpos);
  end else
  ...
Ein Therapeut entspricht 1024 Gigapeut.
  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 14:13 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-2025 by Thomas Breitkreuz