无论如何缩短,如果(i == x || i == y)?
我试图缩短我的代码,从:
if(i== x || i == y || i == z )
至
if (i == ( x || y || z ))
我知道这种方式是错误的,因为我得到了不正确的日志。
但是,有什么方法可以缩短Objective-C中的代码吗?
如果x==i
比y==i
概率更高,那么最好把它写成x==i || y==i
x==i || y==i
而不是y==i || x==i
y==i || x==i
因为如果第一个语句的计算结果为真,第二个不计算(短路)
你可以使用一个switch
语句,但是这并不能真正为你带来2-3个值。
switch (i) { case x: case y: case z: ....some code.... break default: ....some other code.... }
如果你检查的东西比较复杂,或者你有更多的select,这将是更多的节省。
如果你想检查很多对象,你可以使用NSArray
和indexOf
方法:
NSArray *matchingNumbers = @[@1,@2,@3,@4,@5,@6,@7,@8]; NSNumber *checkedNumber = @3; if ( [matchingNumbers indexOfObject:checkedNumber] != NSNotFound) { //... }
计算机使用数字信号。 计算机的所有自然操作都是二元的。
如果你想比较三件事情,你将不得不使用两个二进制比较,使电脑更好。
你也需要认识到, 更短的代码不一定更快 。 通常,这只是作者的一个捷径。
那么为什么你认为你需要进一步缩短这个expression呢?
至于你的问题,你比较了50个值。
做一个由50个variables组成的NSMutableArray …然后使用这个代码。
使用此代码:
if ([myArray containsObject:i]) {
奇迹般有效!
如果你想单独检查每个值,可以使用while循环或for循环:
n = 0; while (n<49) { if (n==[myArray objectAtIndex:n]) { //OR statement returned true for one of the 50 objects... } }
以下部分是针对需要对此问题有不同答案的其他人:
如果我们有其他的代码,可能会有办法缩短你的整个条件语句…至于缩短“OR”部分,我不知道如何…
但是像这样的:
if ((i==x)||(i==y)) { string=@"hello"; }
可能会变成:
string = ((i==x)||(i==y)) ? @"hello";
或者…像这样的东西:
if ((i==x)||(i==y)) { string=@"hello"; } else { string=@"goodbye"; }
可能会变成:
string = ((i==x)||(i==y)) ? @"hello" : @"goodbye";
由于我经常使用带有数字值的条件语句,所以我经常使用一个快捷方式,如果条件语句为真,它就相当于1,而如果它是假的,则相当于0,因为这个我可以说
myNumber = ((i==x)||(i==y))*(z+w);
如果我等于x或y,它将返回true(这是“1”),它将返回1 *(z + w)或(z + w),但是如果条件为false,则返回“0” (z + w)或0。
最后的注意事项:*可能有math方法来表示函数的帽子返回所需的结果…例如,如果x = -2和y = 2而不是检查是否我== x或i == y只是检查如果abs(i)== y(* abs是绝对值)
如果你正在使用variables吨你可以做这样的事情:)
if ([[[NSMutableArray alloc] initWithObjects:x,y,z,a,b,c,d,e,f,g,h,j,k,l,nil] containsObject:i]) {