Die große O-Komplexität einer switch-Anweisung ist nicht wirklich der wichtige Punkt. Die Big-O-Notation bezieht sich auf die Performance, wenn n in Richtung Unendlichkeit zunimmt. Wenn Sie eine switch-Anweisung haben, die groß genug ist, dass die asymptotische Leistung ein Problem ist, dann ist es zu groß und sollte refaktorisiert werden.
Abgesehen von der Lesbarkeit, in Java und C# Ich glaube, Sie würden bald einige interne Grenzen für die maximale Größe einer einzelnen Methode treffen.
Für relativ kleine Switch-Anweisungen, die oft aufgerufen werden, wäre es wahrscheinlich informativer, die tatsächliche Leistung der switch-Anweisung mit anderen Ansätzen zu vergleichen, die Sie stattdessen verwenden könnten. Diese Messung könnte durch wiederholtes Durchführen der Operation in einer Schleife durchgeführt werden.
Für größere Switch-Anweisungen würde ich Refactoring vorschlagen, um ein Wörterbuch oder ähnliche Datenstruktur zu verwenden, die ungefähr O (1) Leistung hat sogar n wird sehr groß und es wird keine Probleme mit der begrenzten Methode Größe.
Die Antwort ist nicht nur sprachspezifisch, nicht einmal compilerspezifisch. Es hängt vom tatsächlichen Code ab. Einige switch-Anweisungen werden von einigen Compilern in Jump-Tabellen umgewandelt. –
Im anderen Extremfall können die Werte dazu führen, dass andere Funktionen aufgerufen werden. In Ruby zum Beispiel werden Werte mit dem Operator '===' überprüft, der alles kann. Eine übliche Verwendung davon sind reguläre Ausdrücke, die (in bestimmten Fällen) sehr teuer sein können - also werden die Kosten des Schalters von den Werten selbst bestimmt, nicht von der Anzahl der Werte. – Ken
Gibt es eine Situation, in der es * größer * als O (n) sein könnte (für * n * Fälle im Switch)? – FrustratedWithFormsDesigner