Verwendung von Zeichenfolgen als Diskriminanzvariablen in der Case-Anweisung von Delphi Chen Jiaxin╱[email protected]● Bei der Erwähnung von Case-Anweisungen in der Einleitung fällt mir als Erstes der Anwendungsfall ein, Variablen zu bestimmen, um dem Programmfluss die Auswahl zu ermöglichen ein geeigneter Weg, um die Ausführung unter verschiedenen Bedingungen fortzusetzen. Oder wenn es in unserem Programm eine Reihe von if- und else-if-Anweisungskombinationen gibt, denken wir oft an die Verwendung von Case-Anweisungen, um den Programmcode zu vereinfachen und seine Lesbarkeit und Ausführungseffizienz zu verbessern. In einigen Fällen können Case-Anweisungen jedoch nicht auf unsere Programme angewendet werden, da die von ihnen zugelassenen Diskriminanzvariablen auf jede Form von xPRession beschränkt sind. Dabei handelt es sich um sogenannte „Ordinaltypen“, die sich auf „geordnete“ Typen beziehen, z Ganzzahlen, Zeichen, Aufzählungen, Boolesche Werte und Mengen können auf Dinge wie Ord(), Pred(), Succ(), Low() und High() angewendet werden. Der Ausdruckstyp (siehe [1]). Leider ist String (String) offensichtlich kein Ordinaltyp, und irgendwann (ein Beispiel wird weiter unten gegeben), wenn der Typ der Bedingungsvariablen ein String ist und es ziemlich viele bedingte Verzweigungen gibt, obwohl dies hilflos ist, Allerdings scheint es leider keinen anderen Weg zu geben, als viele if- und else-if-Anweisungen zu verwenden. Beispielsweise ist der folgende Code in Delphi nicht zulässig: #001 var #002 Str: String; // Deklarieren Sie eine Diskriminanzvariable vom Typ String #003 begin #004 case Str of // Fehlermeldung: Ordinaltyp erforderlich #005 / / ... #006 end; #007 end;Dies kann einfach nicht kompiliert werden, daher besteht die herkömmliche Lösung normalerweise darin, es in eine Kombination aus einer großen Anzahl von if- und else if-Anweisungen umzuwandeln. An dieser Stelle wünschte ich wirklich, wir würden Visual Basic verwenden, da der folgende Code von seinem Compiler zugelassen wird (siehe [5]): #001 Dim Str As String ' Deklariert eine Diskriminanzvariable vom Typ String #002 Select Case Str ' ist äquivalent zu Delphis Case-Anweisung #003 '... #004 End Select ' OK, durch Kompilierung. Daher versucht der Autor in diesem Artikel, dieses Problem als Ausgangspunkt zu verwenden, in „Zusätzlich zur Konvertierung in eine Kombination aus if und else.“ Wenn Aussagen „Suchen Sie nach anderen praktikablen Lösungen neben herkömmlichen Lösungen“ und hoffen Sie aufrichtig, dass dieser Artikel für Menschen hilfreich sein kann, die mit diesem Problem konfrontiert sind und eine Lösung finden möchten (nach der Lektüre von [12]-[14] führt der Autor weiter). festgestellt, dass dies tatsächlich der Fall ist) Hilft. Lassen Sie mich zunächst eine Vorschau geben. Die ersten fünf Methoden sind Auszüge oder Erweiterungen aus [9]-[13], und die sechste Methode ist ein vom Autor implementierter umfassender Multiloader. Version. Diese Optionen sind: v Option 1: String-Array durchsuchen v Option 2: Echten Index verwenden v Option 3: Hash-Funktion verwenden v Option 4: Verschachtelte Case-Anweisung v Option 5: TStringList verwendenv Option 6: Multi-Load-Funktion implementieren Lösung 7: Anwenden In diesem Artikel werden zunächst Themen wie bedingte Anweisungen (Hauptinhalt siehe [1] und [4]) und Erkennungszeichenfolgen (Hauptinhalt siehe [2]) behandelt Lesen Sie in diesem Abschnitt den Abschnitt „Leistungsprobleme“ direkt am Ende des Artikels.