से एन यादृच्छिक वस्तुओं (उदाहरण के लिए 4) प्राप्त करें मेरे पास नामों का एक बड़ा एनएसएआरआरई है, मुझे उस सरणी से यादृच्छिक 4 रिकॉर्ड (नाम) प्राप्त करने की आवश्यकता है, मैं यह कैसे कर सकता हूं?nsarray
nsarray
उत्तर
#include <stdlib.h>
NSArray* names = ...;
NSMutableArray* pickedNames = [NSMutableArray new];
int remaining = 4;
if (names.count >= remaining) {
while (remaining > 0) {
id name = names[arc4random_uniform(names.count)];
if (![pickedNames containsObject:name]) {
[pickedNames addObject:name];
remaining--;
}
}
}
मैंने NSArray+RandomSelection
नामक एक देखभाल की।
NSArray+RandomSelection.h
@interface NSArray (RandomSelection)
- (NSArray *)randomSelectionWithCount:(NSUInteger)count;
@end
NSArray+RandomSelection.m
@implementation NSArray (RandomSelection)
- (NSArray *)randomSelectionWithCount:(NSUInteger)count {
if ([self count] < count) {
return nil;
} else if ([self count] == count) {
return self;
}
NSMutableSet* selection = [[NSMutableSet alloc] init];
while ([selection count] < count) {
id randomObject = [self objectAtIndex: arc4random() % [self count]];
[selection addObject:randomObject];
}
return [selection allObjects];
}
@end
आप एक स्विफ्ट फ्रेमवर्क पसंद करते हैं: बस एक परियोजना में इस श्रेणी आयात करते हैं, और फिर बस
NSArray *things = ...
...
NSArray *randomThings = [things randomSelectionWithCount:4];
यहाँ का उपयोग कार्यान्वयन है टी टोपी में कुछ और आसान विशेषताएं भी चेकआउट HandySwift के लिए स्वतंत्र महसूस करती हैं। इसके बाद आप कार्थेज के माध्यम से अपनी परियोजना में जोड़ सकते हैं इस तरह इसका इस्तेमाल:
import HandySwift
let names = ["Harry", "Hermione", "Ron", "Albus", "Severus"]
names.sample() // => "Hermione"
वहाँ भी एक बार पर कई यादृच्छिक तत्वों प्राप्त करने के लिए एक विकल्प है:
names.sample(size: 3) // => ["Ron", "Albus", "Harry"]
मुझे आशा है कि इस मदद करता है !
समाप्त कर देंगे, यह प्रश्न का उत्तर नहीं देता है क्योंकि आपको यह दिखाने की आवश्यकता है कि यादृच्छिक संख्याओं की सूची का उपयोग कैसे किया जा सकता है उठाए गए नाम सरणी बनाने के लिए बड़े सरणी में नामों का चयन करें। – Droppy
ऐसा लगता है कि मेरा जवाब भ्रामक था। मैंने इसे संख्या सरणी के बजाय एक नाम सरणी का उपयोग करने के लिए अद्यतन किया है। वही काम करता है, सिर्फ एक अलग प्रकार का ऐरे। मुझे आशा है कि यह अभी स्पष्ट है। – Dschee
बीज को मत भूलना ... –
सच है, मैंने बस arc4random() द्वारा रैंड() को प्रतिस्थापित किया है जो बेहतर है और बीजिंग की आवश्यकता नहीं है। –
धन्यवाद, यह ठीक काम करता है। लेकिन, मुझे लगता है कि उठाए गए नाम एनएसएमयूटेबलएरे –