2011-06-05 5 views

Répondre

3

Pas vraiment.

Une alternative est:

switch (value1) 
{ 
case 1: 
case 3: 
case 6: 
    // Things happen 
} 

Mais ce n'est pas "plus rapide"!

+0

C'est probablement un moyen plus efficace de le faire, ce qui est probablement le mot que j'aurais dû utiliser. Je vais regarder dans les commutateurs. Merci. – Andrew

+0

@Andrew Dites-moi ce que vous pensez de ma réponse. –

+0

Downvoter: Pourquoi? –

2

Vous pouvez utiliser une instruction switch:

switch (value1) 
    { 
     case 1: 
     case 3: 
     case 6: 
     //Things happen 
     break; 
     case 4: 
     //Something else happens 
     break; 
     default: 
     //Something else happens 
    } 

Ceci est utile si vous sinon allez avoir beaucoup de déclarations si la vérification de la même variable.

1

Si vous voulez dire faire quelque chose comme:

if (value1 in {1, 3, 6}) ... 

alors non, vous ne pouvez pas faire quelque chose comme ça. Objective-C n'a aucun type d'opérateur set pour les types de base. Cependant, il existe d'autres façons d'écrire votre code, de sorte que vous pouvez faire une opération similaire rapidement. Par exemple, si le nombre de valeurs possibles est pas trop grand, vous pouvez utiliser des positions de bits:

if (value1 & (0x02 | 0x08 | 0x20)) ... 

Le compilateur probablement ou ces constantes ensemble au moment de la compilation, de sorte que la comparaison ne prend que aussi longtemps que opération ET au niveau du bit.

+0

Comment ce second fragment de code se rapporte-t-il à la question? –

+0

À moins que l'ensemble de nombres ne contienne tous les nombres avec l'un de ces bits, ce qui est si peu probable qu'essentiellement impossible, l'approche basée sur les bits sera totalement erronée. – smorgan

+0

@smorgan, je pense que vous vous méprenez. Peut-être aurais-je dû l'écrire ainsi: '(1 << 1 | 1 << 3 | 1 << 6)'. Cette approche est pratique si les valeurs vont de 0 à 63, peut-être plus, et c'est souvent un ensemble très utile. – Caleb

Questions connexes