4

私は自分のコードを短くしようとしました:から

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

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

ログで間違ったiを取得したため、この方法が間違っていることを知っています。

しかし、Objective-Cのコードを短縮する方法はありますか?

4

6 に答える 6

9

ステートメントを使用することもできますが、switch2〜3個の値だけではそれほど多くは購入できません。

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

あなたがチェックしているものがより複雑であるか、あなたがより多くのオプションを持っていれば、それはより多くの節約になるでしょう。

于 2013-02-17T09:47:59.970 に答える
8

最初のステートメントがtrueと評価された場合、2番目のステートメントは評価されない(短絡されている)ため、それx==iよりも高い確率でy==i書く方がよい場合x==i || y==iy==i || x==i

于 2013-02-17T09:47:26.820 に答える
5

使用できるオブジェクトNSArrayindexOfメソッドを多数チェックする場合は、次のようにします。

    NSArray *matchingNumbers = @[@1,@2,@3,@4,@5,@6,@7,@8];
    NSNumber *checkedNumber = @3;
    if ( [matchingNumbers indexOfObject:checkedNumber] != NSNotFound)
    {
        //...
    }
于 2013-02-17T09:49:48.887 に答える
3

コンピューターはデジタル信号を処理します。コンピューターの自然な操作はすべてバイナリです。

3つのことを比較したい場合は、2つのバイナリ比較を使用して、コンピューターに適したものにする必要があります。

また、短いコードが必ずしも高速であるとは限らないことを理解する必要があります。多くの場合、これは作成者にとってのショートカットの概念にすぎません。

では、なぜこの式をさらに短くする必要があると思いますか?

于 2013-02-17T09:48:13.917 に答える
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";





私は数値を含む条件文をよく使用するので、条件文がtrueの場合は1に相当し、falseの場合は0に相当するショートカットを使用することがよくあります。このため、次のように言うことができます。

myNumber = ((i==x)||(i==y))*(z+w);

iがxまたはyに等しい場合、true( "1")を返し、1 *(z + w)または(z + w)を返しますが、条件がfalseの場合、 "0"を返し、0*を返します。 (z + w)または0。





最後の注意:*関数ハットが希望する結果を返すことを数学的に表す方法があるかもしれません...たとえば、i==xまたはi==yをチェックする代わりに、x=-2およびy=2の場合abs(i)== yの場合(* absは絶対値です)

于 2013-02-17T14:02:54.053 に答える
0

大量の変数を使用している場合は、次のようにすることができます:)

if ([[[NSMutableArray alloc] initWithObjects:x,y,z,a,b,c,d,e,f,g,h,j,k,l,nil] containsObject:i]) {
于 2014-07-30T19:12:35.000 に答える