Einzelnen Beitrag anzeigen

choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#4

Re: case string of (ordinale Typen)

  Alt 26. Nov 2003, 16:37
Du könntest den String auf einen Hash-Wert abbilden
Delphi-Quellcode:
case Hash(AString) of
  Hash('foo'): //...
  Hash('bar'): //...
else
  //...
end;
dabei könnten die Hash-Werte der Möglichkeiten auch vorbereichnet werden, weil Konstant
Delphi-Quellcode:
_foo:= Hash('foo');
_bar:= Hash('bar');
//...
case Hash(AString) of
  _foo: //...
  _bar: //...
else
  //...
end;
Nachteil: Nicht eineindeutig, also können verschiedene Strings uU auf den selben Hash-Wert abgebildet werden (hier müsste dann eine erneute Prüfung durchgeführt werden).

Ein anderer Ansätz wäre, die Möglichkeiten als geordnete (ich meine nicht sortiert!) Menge (Array) an eine Funktion zu übergeben, die den String in dieser Menge sucht und dessen Index zurückgibt:
Delphi-Quellcode:
case GetIndexOf(AString, ['foo', 'bar']) of
   0: //...
   1: //...
else
  //...
end;
Nachteil: Mit steigender Cardinalität der Menge ist der Zusammenhang von Index und Wert relativ schwer zu überschauen, darüber hinaus nimmt die Performance linear ab, während sie bei einer Hash-Funktion konstant bleibt.
gruß, choose
  Mit Zitat antworten Zitat