491 Stimmen

Gibt es eine bessere Möglichkeit, v = (v == 0 ? 1 : 0) zu schreiben;

Ich möchte eine Variable zwischen 0 und 1 hin- und herschalten. Wenn sie 0 ist, möchte ich sie auf 1 setzen, wenn sie 1 ist, möchte ich sie auf 0 setzen.

Dies ist ein so grundlegender Vorgang, dass ich so oft schreibe, dass ich die kürzeste und klarste Art und Weise, ihn auszuführen, untersuchen möchte. Hier ist meine bisher beste:

v = (v == 0 ? 1 : 0);

Können Sie dies noch verbessern?

Edit: die Frage ist, wie man die obige Aussage in möglichst wenigen Zeichen schreiben kann, ohne die Klarheit zu verlieren - inwiefern ist das "keine richtige Frage"? Dies war nicht als Code-Golf-Übung gedacht, obwohl einige interessante Antworten von Leuten gekommen sind, die sich der Frage als Golf nähern - es ist schön zu sehen, dass Golf in einer konstruktiven und zum Nachdenken anregenden Weise verwendet wird.

763voto

Guffa Punkte 663241

Sie können einfach verwenden:

v = 1 - v;

Dies setzt natürlich voraus, dass die Variable richtig initialisiert ist, d.h. dass sie nur den Wert 0 oder 1 hat.

Eine weitere Methode, die kürzer ist, aber einen weniger verbreiteten Operator verwendet:

v ^= 1;

Bearbeiten:

Um das klarzustellen: Ich habe diese Frage nie als Code-Golf angegangen, sondern nur, um einen kurzen Weg zu finden, die Aufgabe zu erledigen, ohne irgendwelche verdeckenden Tricks wie Nebeneffekte von Operatoren zu verwenden.

359voto

Quentin Punkte 850700

Desde 0 ist eine false Wert und 1 ist eine true Wert.

v = (v ? 0 : 1);

Wenn Sie gerne die true et false anstelle von Zahlen

v = !v;

oder ob es sich um Zahlen handeln muss:

v = +!v; /* Boolean invert v then cast back to a Number */

204voto

Prusse Punkte 4257

v = (v + 1) % 2 und wenn Sie mehr Werte durchlaufen müssen, ändern Sie einfach 2 para (n + 1) . Angenommen, Sie müssen den Zyklus 0,1,2 durchlaufen, dann tun Sie einfach v = (v + 1) % 3 .

77voto

Daniel Punkte 1527

Sie könnten eine Funktion dafür schreiben und sie wie folgt verwenden:

v = inv(v)

52voto

Brian Punkte 2702

Wenn Sie sich für keine andere Möglichkeit als die 1:

v = v ? 0 : 1;

Im obigen Fall wird v am Ende 1 sein, wenn v 0, false, undefiniert oder null ist. Seien Sie vorsichtig mit dieser Art von Ansatz - v wird 0 sein, auch wenn v "Hallo Welt" ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X