संक्षेप में, आप NSSet
से सीधे यादृच्छिक वस्तु पुनर्प्राप्त नहीं कर सकते हैं।
आपको या तो एक सरणी में सेट को चालू करने की आवश्यकता है - जिसमें किसी इंडेक्स को यादृच्छिक बनाया जा सकता है - एक सरणी का उपयोग करने के लिए अपने कोड को पुन: आर्किटेक्ट करके या आप इस छद्म कोड का उपयोग करके इसे कार्यान्वित कर सकते हैं :
randomIndex = ...random-generator....(0 .. [set count]);
__block currentIndex = 0;
__block selectedObj = nil;
[set enumerateObjectsWithOptions:^(id obj, BOOL *stop) {
if (randomIndex == currentIndex) { selectedObj = obj; *stop = YES }
else currentIndex++;
}];
return selectedObj;
हां - यह ऑब्जेक्ट को पकड़ते समय सेट, संभावित रूप से पूरे सेट को पुन: सक्रिय करता है। हालांकि, यह पुनरावृत्ति काफी है कि एनएसएआरएआरई में रूपांतरण में क्या होगा। जब तक सेट इतना बड़ा न हो और आप इसे पर कॉल नहीं कर रहे हैं तो अक्सर, कोई बड़ा सौदा नहीं होता है।
उपयोग की अपनी पहली सुझाव के साथ जाना होगा फिर से मिलना हो रहा है की आसानी के लिए '[mySet allObjects]' जो एक सरणी वापस आ जाएगी और फिर यादृच्छिक अनुक्रमणिका –
प्राप्त करने के लिए अपने मौजूदा तर्क का उपयोग करें, बीबीएम ने मेरे जवाब में एक बड़ी गलती की, धन्यवाद। हटाए गए। – Almo
क्या आप यादृच्छिक चाहते हैं, या आप बस परवाह नहीं करते हैं? विशेष रूप से, मेरा मतलब है, "क्या आप' - [NSSet anyObject] 'के बारे में जानते हैं? " –