2010-05-04 4 views
6

मेरे पास एक एनएसएआरएआर है जो बूल से भरा हुआ है (एक संख्या के रूप में व्यक्त किया गया है), और मुझे यह देखने के लिए परीक्षण करना होगा कि सरणी के भीतर कोई ऑब्जेक्ट 1 के बराबर है या नहीं। मैं इसे कैसे कर सकता हूं?बूल ऑब्जेक्ट्स से भरे एनएसएआरएआर

+0

यो क्या करता है आप बूल ऑब्जेक्ट से मतलब है? –

+0

पोस्ट उत्तर में संपादित किया गया। प्रश्न –

+0

क्या आप एनएसएआरएआरई में इन्ट्स जोड़ने की कोशिश कर रहे हैं? 'कारण यह नहीं किया जा सकता है। –

उत्तर

12

बूल ऑब्जेक्ट्स नहीं हैं। मान लीजिए कि आप एनएसएनंबर जैसे बूलियन का प्रतिनिधित्व करने वाली कुछ वस्तु का मतलब है जो एक उचित isEqual: लागू करता है, आप बस [array containsObject:[NSNumber numberWithBool:YES]] जैसे कुछ कर सकते हैं।

+0

वाह। मुझे नहीं पता था कि इसका इस्तेमाल इस तरह किया जा सकता है। धन्यवाद!!! –

6

चक कहते हैं, -[NSArray containsObject:[NSNumber numberWithBool:YES]] का उपयोग करें। एक सोचा प्रयोग के रूप में, यहाँ कुछ अन्य तरीकों से लक्ष्य को पूरा करने के लिए कर रहे हैं ...

आप एक NSPredicate का उपयोग कर या नए ब्लॉक एपीआई का उपयोग कर सकते हैं:

NSArray *myArr //decleared, initialized and filled 

BOOL anyTrue = [myArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"boolValue == 1"]].count > 0; 

या

BOOL anyTrue = [myArray indexesOfObjectsPassingTest:^(id obj, NSUInteger idx, BOOL *stop) { 
    if([obj boolValue]) { 
    *stop = YES; 
    } 
    return [obj boolValue]; 
}].count > 0; 

आप कुंजी-वैल्यू कोडिंग का भी उपयोग कर सकते हैं, हालांकि मुझे इसकी सापेक्ष दक्षता सुनिश्चित नहीं है:

[[myArray valueForKeyPath:@"@sum.boolValue"] integerValue] > 0; 
+3

वह बूल-संक्षेप में केवीसी संस्करण सरल रूप से डरावना है। – Chuck

+0

@ चक, हां, मैं वास्तविक कोड में इनमें से किसी भी समाधान को पढ़ने के लिए थोड़ा सा आंका हूं। हालांकि, मज़ा थोड़ा कार्यात्मक प्रोग्रामिंग मस्तिष्क व्यायाम। –