2012-05-06 105 views
0

初學者的問題在這裏:範圍?邏輯還是?目標C

如果我正在寫一個If語句,我想涉及值的範圍,特別是標記,除了使用邏輯OR還有一個更簡單的方法嗎?

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

這看起來不是很有效..

+1

有一個關於'IN'操作類似於帕斯卡,很遺憾。很少有語言具有此功能。 –

回答

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

取決於你的「容易」 ......對於比較效率少數定義不是一個真正的考慮;您可以測試各個值,或者如果值是連續的,請執行>=<=測試。您可以隨時使用宏或內聯函數,整齊的事情,如果你喜歡,e.g:

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()等功能。由於單字節字符最多爲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; 
}