初學者的問題在這裏:範圍?邏輯還是?目標C
如果我正在寫一個If語句,我想涉及值的範圍,特別是標記,除了使用邏輯OR還有一個更簡單的方法嗎?
if (tableView.tag == 1 || tableView.tag==2 || tableView.tag==3) { do something}
這看起來不是很有效..
初學者的問題在這裏:範圍?邏輯還是?目標C
如果我正在寫一個If語句,我想涉及值的範圍,特別是標記,除了使用邏輯OR還有一個更簡單的方法嗎?
if (tableView.tag == 1 || tableView.tag==2 || tableView.tag==3) { do something}
這看起來不是很有效..
if (tableView.tag >= minRange && tableView.tag <= maxRange)
{
}
取決於你的「容易」 ......對於比較效率少數定義不是一個真正的考慮;您可以測試各個值,或者如果值是連續的,請執行>=
和<=
測試。您可以隨時使用宏或內聯函數,整齊的事情,如果你喜歡,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
您可以使用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;
}
有一個關於'IN'操作類似於帕斯卡,很遺憾。很少有語言具有此功能。 –