无论如何缩短,如果(i == x || i == y)?

我试图缩短我的代码,从:

if(i== x || i == y || i == z ) 

 if (i == ( x || y || z )) 

我知道这种方式是错误的,因为我得到了不正确的日志。

但是,有什么方法可以缩短Objective-C中的代码吗?

如果x==iy==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,这将是更多的节省。

如果你想检查很多对象,你可以使用NSArrayindexOf方法:

  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]) {