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

时间:2013-02-17 09:43:42

标签: ios objective-c if-statement logic conditional-statements

我试图缩短我的代码,来自:

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

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

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

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

6 个答案:

答案 0 :(得分:9)

您可以使用switch声明,但只有2-3个值,这并不会给您带来太大的好处。

switch (i) {
    case x:
    case y:
    case z:
        ....some code....
        break
    default:
        ....some other code....
}

如果你检查的东西更复杂或者你有更多的选择,那就更省钱了。

答案 1 :(得分:8)

如果x==i的概率高于y==i,则最好将其写为x==i || y==i而不是y==i || x==i,因为如果第一个语句的计算结果为true,第二个没有评估(它是短路的)

答案 2 :(得分:5)

如果要查看大量对象,可以使用NSArrayindexOf方法:

    NSArray *matchingNumbers = @[@1,@2,@3,@4,@5,@6,@7,@8];
    NSNumber *checkedNumber = @3;
    if ( [matchingNumbers indexOfObject:checkedNumber] != NSNotFound)
    {
        //...
    }

答案 3 :(得分:3)

计算机使用数字信号。计算机的所有自然操作都是二进制的。

如果你想比较三件事,你将不得不使用两个二进制比较来使它对计算机有好处。

此外,您需要意识到更短的代码不一定更快。通常,这只是作者的捷径概念。

那么为什么你认为你需要进一步缩短这个表达式?

答案 4 :(得分:3)

至于你比较50个值的问题。

创建由这50个变量组成的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);

如果i等于x或y,它将返回true(即“1”),它将返回1 *(z + w)或(z + w)但如果条件为false则返回“0”,返回0 *(z + w)或0。





最后的说明: *可能有数学方法来表示函数帽子返回你想要的结果...例如,如果x = -2和y = 2而不是检查i == x或i == y只检查是否abs( i)== y(*绝对值是绝对值)

答案 5 :(得分:0)

如果您使用TONS变量,您可以执行以下操作:)

if ([[[NSMutableArray alloc] initWithObjects:x,y,z,a,b,c,d,e,f,g,h,j,k,l,nil] containsObject:i]) {