我想在0和1之间切换一个变量。如果是0,我就设它为1,如果是1,我就设它为0。
这是一个非常基本的运算,我经常写,我想研究一下最短,最清晰的方法。这是我目前为止最好的:
v = (v == 0 ? 1 : 0);
你能改进一下吗?
编辑:这个问题问的是如何在保持清晰的情况下用最少的字符写出上面的语句——为什么这“不是一个真正的问题”?这并不是一个代码-高尔夫练习,尽管一些有趣的答案来自于把它当作高尔夫的人——很高兴看到高尔夫以一种建设性和发人深省的方式被使用。
我想在0和1之间切换一个变量。如果是0,我就设它为1,如果是1,我就设它为0。
这是一个非常基本的运算,我经常写,我想研究一下最短,最清晰的方法。这是我目前为止最好的:
v = (v == 0 ? 1 : 0);
你能改进一下吗?
编辑:这个问题问的是如何在保持清晰的情况下用最少的字符写出上面的语句——为什么这“不是一个真正的问题”?这并不是一个代码-高尔夫练习,尽管一些有趣的答案来自于把它当作高尔夫的人——很高兴看到高尔夫以一种建设性和发人深省的方式被使用。
当前回答
一般来说,当你需要在两个值之间切换时,你可以从两个切换值的和中减去当前值:
0,1 -> v = 1 - v 1,2 -> v = 3 - v 4,5 -> v = 9 - v
其他回答
v = (v + 1) % 2,如果你需要循环更多的值,只需将2改为(n + 1),假设你需要循环0,1,2,只需做v = (v + 1) % 3。
v = v == 0 ? 1 : 0;
够了!
这是缺失的:
v = [1, 0][v];
它也可以像轮询一样工作:
v = [2, 0, 1][v]; // 0 2 1 0 ...
v = [1, 2, 0][v]; // 0 1 2 0 ...
v = [1, 2, 3, 4, 5, 0][v]; // 0 1 2 3 4 5 ...
v = [5, 0, 1, 2, 3, 4][v]; // 0 5 4 3 2 1 0 ...
Or
v = {0: 1, 1: 0}[v];
最后一个解决方案的魅力在于,它也适用于所有其他值。
v = {777: 'seven', 'seven': 777}[v];
对于一个非常特殊的情况,比如获取一个(变化的)值并且未定义,这个模式可能是有用的:
v = { undefined: someValue }[v]; // undefined someValue undefined someValue undefined ...
如果你保证你的输入是1或0,那么你可以使用:
v = 2+~v;
一个: v = + + v % 2
(在C语言中是简单的++v%=2)
ps.是的,我知道这是双赋值,但这只是C的方法的原始重写(它不工作,因为JS的前增量操作符不返回左值。