Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi case string of (ordinale Typen) (https://www.delphipraxis.net/12401-case-string-ordinale-typen.html)

meximum 26. Nov 2003 14:57


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

Hansa 26. Nov 2003 15:02

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.

meximum 26. Nov 2003 15:04

Re: case string of (ordinale Typen)
 
ja, es wären ressourcenstrings. okay, danke - bleibt mir wohl nichts anderes übrig :-D
Gruss

meximum

choose 26. Nov 2003 15:37

Re: case string of (ordinale Typen)
 
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.

DocMucki 28. Nov 2003 08:09

Re: case string of (ordinale Typen)
 
Vieleicht so:

http://www.delphipraxis.net/internal...ect.php?p=4083

DocMucki


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