2012-05-06 8 views
0

ここに初心者の質問範囲?論理か?目的のC

値の範囲、具体的にタグに関連したいIf文を書いているのなら、Logical OR以外にも簡単な方法がありますか?

if (tableView.tag == 1 || tableView.tag==2 || tableView.tag==3) { do something} 

これは

+1

残念ながら、パスカルに似IN'演算子 'にあります。この機能を持つ言語はごくわずかです。 –

答えて

4
if (tableView.tag >= minRange && tableView.tag <= maxRange) 
{ 
} 
1

を比較効率の少数のために本当に考慮事項ではない...「簡単に」のあなたの定義に依存..非常に効率的では見えません。個々の値をテストするか、または値が連続している場合は、>=および<=のテストを実行します。あなたはいつも例えば、あなたが好きなら、物事を整理するために、マクロ、またはインライン関数を使用することができます。

NS_INLINE BOOL inRange(lower, value, upper) { return (lower <= value) && (value <= upper); } 

大きなテストの番号、または単に美学のために、他の方法は、ビットマスクと配列を使用しています。

連続した値が32または64までの小さい数をテストする場合は、テストするセットのビットマスクを定義し、ビット単位および演算を実行できます。例:

typedef enum { Sunday = 0, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday } Day; 

int WeekendSet = (1 << Sunday | 1 << Saturday); 

if ((1 << day) & WeekendSet) // day is a weekend 

大規模ではあるがまだ大きすぎないセットでは、配列を使用できます。標準ライブラリisletter()isdigit()などの機能が定義されることがあります。 1バイト文字は255以下であるため、256要素のブール値の静的配列を宣言すると、かなりうまく動作します。例えば。

static uint8 isADigit[] = { 0, 0, ..., 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, ... }; // 256 values, only 10 1's for position's '0' through '9' 

if (isADigit[myChar]) // myChar is a digit 
0

あなたがテストしている値は整数型である場合は、フォールスルーでswitchを使用することができます。

switch(tableView.tag) { 
    case 1: 
    case 2: 
    case 3: 
     // do something 
     break; 
    case 4: 
    case 5: 
    case 6: 
    case 7: 
    case 8: 
    case 9: 
     // do something else 
     break; 
}