Get n random objects (for example 4) from nsarray

后端 未结 3 691
礼貌的吻别
礼貌的吻别 2020-12-29 11:31

I have a large NSArray of names, I need to get random 4 records (names) from that array, how can I do that?

3条回答
  •  渐次进展
    2020-12-29 11:47

    I made a caregory called NSArray+RandomSelection. Just import this category into a project, and then just use

    NSArray *things = ...
    ...
    NSArray *randomThings = [things randomSelectionWithCount:4];
    

    Here's the implementation:

    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
    

提交回复
热议问题