我想有一個標識符負責一次的幾個值。如果我有一個這是我可以做的:多個值的一個標識符。可能嗎?
if (myVariable == IDENTIFIER)//instead of if(myVariable == 5 || myVariable == 7) if i need A LOT of values
[myObject doSomething];
有沒有可能以某種方式實現它?
我想有一個標識符負責一次的幾個值。如果我有一個這是我可以做的:多個值的一個標識符。可能嗎?
if (myVariable == IDENTIFIER)//instead of if(myVariable == 5 || myVariable == 7) if i need A LOT of values
[myObject doSomething];
有沒有可能以某種方式實現它?
我認爲你能來最接近的是使用位掩碼,這樣就代表了一組允許的值與具有所有設定值的掩碼:
const int ALL_VALUES = (1 << 5) | (1 << 7);
if ((1 << myVariable) & ALL_VALUES)
[myObject doSomething];
以上,逐位AND被用來計算電流值(被視爲1位掩碼)和所有允許值的掩模之間的交點。請注意,只有在值的數量(及其實際值的值)小於int
中的位數時,此操作纔有效。
你可以有可能值NSSet
:
NSSet *possibleValues = [NSSet setWithObjects:@"Value1", @"Value2", @"Value3", nil];
if ([possibleValues containsObject:myVariable])
如果你需要的東西,用生整數的作品,讓我知道。
這是什麼方法是:
- (BOOL)isFoo(int identifier) {
return identifier == 5 || identifier == 7;
}
合併答案。首先使用函數(grahamparks的變體):
BOOL isFoo(int identifier)
{
...
return ...;
}
對於一些這個簡單的一個功能可能比一個方法更好 - 電話是快了很多,而且也沒有必要永遠覆蓋。此外,如果僅在當前文件中需要該功能,則聲明它爲static BOOL isFoo...
以將isFoo
的可見性限制爲僅文件。
現在挑選適合數據的身體 - 一對值,比較(grahamparks);超過一些值,但全部在0-31(uint32_t
)或0-63(uint64_t
)內考慮位掩碼(展開);整個範圍內的許多價值觀都集合在一起(Richard J. Ross III);或者滾動你自己的。您選擇的任何算法的重要一點是在函數中被隔離,並且可以根據需要輕鬆更改,而不會影響其他代碼。
作爲現有類似的例子在標準C庫中考慮isDigit()
等。它們的一些實現使用預先分配的布爾數組(256個元素作爲參數是一個字符),因此測試集合的成員資格只是一個數組索引操作。
那麼,你不能用'==' – 2012-01-30 16:11:14