Aus aktuellen Anlaß ein kleine Performance-/Erfahrungs-Frage:
Wie wir alle wissen, unterstützt Delphi kein 'case of' mit dem Typen string.
Nun sieht in meinen Programmen der work around bis jetzt so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| if Value=String1 then begin end else if Value=String2 then begin end else if Value=String3 then begin end else begin end; |
Das finde ich aber nicht wirklich hübsch - oder in meiner Landessprache: Des is schiach. Was ja von der Bedeutung aufs selbe rausläuft.
Aber wie kann man jetzt am besten eine Liste von Konstanten flott und fesch checken ?
Ich hab mir foldendes überlegt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| gCaseList:=THashedStringList.Create(); gCaseList.Add(String1); gCaseList.Add(String2); gCaseList.Add(String3);
case gCaseList.IndexOf(Value) of 0: 1: 2: else end; |
Der Aufwand ist zwar ein bisserl höher, aber das ganze ist wesentlich übersichtlicher als die andere Methode - und vielleicht ja auch schneller (vor allem durchs hashing bei vielen Fällen).
Was haltet ihr von diesem Ansatz - oder wißt ihr vielleicht noch einen besseren ?
In meinem Fall muß ein Parser eine Unzahl Commands auswerten (okay, sind nur zwei Dutzend *g*) - da ist mir dieser Gedanke gekommen, besonders, da man diese Liste ja in initialization/finalization unterbringen kann.
Wer früher stirbt, ist länger tot.