![]() |
case string of (ordinale Typen)
Hallo!
Wie löst ihr das problem? Ich wollte eine auswertung mit case string of durchführen. case erlaubt jedoch keine String-Typen. bleibt mir da wirklich nichts anderes übrig als xx-mal if then else schleifen zu benutzen? Gruss meximum |
Re: case string of (ordinale Typen)
geht das nicht mit einem Aufzählungstyp ? Sind die Strings variabel und erst zur Laufzeit bekannt, kannst Du das CASE sowieso vergessen.
|
Re: case string of (ordinale Typen)
ja, es wären ressourcenstrings. okay, danke - bleibt mir wohl nichts anderes übrig :-D
Gruss meximum |
Re: case string of (ordinale Typen)
Du könntest den String auf einen Hash-Wert abbilden
Delphi-Quellcode:
dabei könnten die Hash-Werte der Möglichkeiten auch vorbereichnet werden, weil Konstant
case Hash(AString) of
Hash('foo'): //... Hash('bar'): //... else //... end;
Delphi-Quellcode:
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).
_foo:= Hash('foo');
_bar:= Hash('bar'); //... case Hash(AString) of _foo: //... _bar: //... else //... end; 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:
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.
case GetIndexOf(AString, ['foo', 'bar']) of
0: //... 1: //... else //... end; |
Re: case string of (ordinale Typen)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:42 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