Ich bin ein ehemaliger Pascal-Typ und lerne derzeit C#. Meine Frage ist die folgende:
Ist der folgende Code schneller als ein Wechsel?
int a = 5;
if (a == 1)
{
....
}
else if(a == 2)
{
....
}
else if(a == 3)
{
....
}
else if(a == 4)
{
....
}
else
....
Und der Schalter:
int a = 5;
switch(a)
{
case 1:
...
break;
case 2:
...
break;
case 3:
...
break;
case 4:
...
break;
default:
...
break;
}
Welche ist schneller?
Ich frage deshalb, weil mein Programm eine ähnliche Struktur hat (viele, viele "else if"-Anweisungen). Sollte ich sie in Schalter umwandeln?
89 Stimmen
Ich fühle mich gezwungen, darauf hinzuweisen, dass Sie die Polymorphie in Ihren Entwürfen möglicherweise nicht ausreichend nutzen, wenn Ihr Code viele dieser Strukturen enthält.
5 Stimmen
Véase stackoverflow.com/questions/445067/if-vs-switch-speed
4 Stimmen
Switch ist zwar schneller, aber wenn man nicht gerade eine enge Schleife hyperoptimiert, bedeutet das gar nichts. Was sind 37 Nanosekunden gegenüber 42 Nanosekunden (erfundene Zahlen)?
0 Stimmen
Ich frage mich, wie sich dies bei der Verwendung von Logik auf der Fallebene unterscheidet, z. B. (Pseudo-)
switch(true) case a==0; case a>0; case a<0;
usw.0 Stimmen
@Jacksonkr Java erlaubt keine Umschaltung auf Werte vom Typ
boolean
. Auch diecase
Ausdrücke müssen konstant sein.0 Stimmen
@GregD Würden Sie diesen Kommentar bitte näher erläutern? Ich weiß, was Polymorphismus als Konzept ist, habe aber wenig Übung damit. Wie würden Sie es nutzen, um in dieser Situation zu helfen?