2013-10-13 3 views
2

Мне было интересно, существует ли более простой способ сделать несколько операторов OR как часть одного оператора IF.Оператор Objective-C IF с несколькими операциями OR

В настоящее время я делаю их так:

  if ((i == 1) || (i == 4) || (i == 7)) {} 

Есть более простой способ?

+2

Ничего плохого в том, что два токовых ответы менее ясны. Кент Бек: «« Самое простое, что могло бы работать »- Кент Бек» – zaph

ответ

5

Вы можете использовать блок switch с падением.

switch (i) 
{ 
    case 1: 
    case 4: 
    case 7: 
     yourCode; 
     break; 
} 
+0

Не думал об этом, спасибо. – flux

+0

Но это не похоже на OR, это больше похоже на использование нескольких других, если условия для одного и того же случая –

+0

На самом деле это так, потому что 'switch' не останавливается, когда он достигает допустимого условия (если вы не используете' break'). –

1

Вы можете использовать containsObject: метод NSArray «с, как это:

if ([@[@1, @4, @7] containsObject:@(i)]) { 
    ... 
} 

Полезность такого подхода улучшается при длине списка: с трех пунктов, ваше решение выглядит лучше, но когда-то вы пересекаете границу около десяти чисел, это решение становится все более и более удобным для чтения:

if ([@[@1, @3, @12, @17, @23, @27, @31, @41, @43, @57] containsObject:@(i)]) { 
    ... 
} 

вы можете сделать именованный массив для списка ехра ected константы @[@1, @4, @7] чтобы укоротить if, как это:

NSArray *expect = @[@1, @4, @7]; 
... 
if ([expect containsObject:@(i)]) { 
    ... 
} 
+0

Но вы потеряли довольно много циклов процессора, если, конечно, посмотрите на код сборки. – Lefteris

+0

Вы можете использовать новый '@ (i)' вместо '[NSNumber numberWithInt: i]'. –

+0

@Lefteris Если это не очень плотная петля, несколько сотен циклов здесь и там меняются в эти дни: в конце концов, мы говорим о процессорах с тактовыми циклами в гигагерцах. – dasblinkenlight

Смежные вопросы