在Objective-C中选择NSArray的随机元素

bea*_*akr 9 arrays random cocoa objective-c nsarray

可能重复:
在NSArray中拾取随机对象

我在Objective-C中有一个带字符串的数组:

NSArray *tips;
tips = [NSArray arrayWithObjects:
       @"Foo",
       @"Bar",
       @"Baz",
       nil];
Run Code Online (Sandbox Code Playgroud)

我想要一个从数组中获取随机项并返回它的方法.有没有方法,或者我怎么能自己写一个?谢谢.

Ada*_*dam 45

使用此代码:

uint32_t rnd = arc4random_uniform([tips count]);

NSString *randomObject = [tips objectAtIndex:rnd];
Run Code Online (Sandbox Code Playgroud)

编辑: 在我的项目工作时,我决定为NSArray创建一个类别.这很简单,但我发现它很有用.

这是文件:

NSArray的+ Random.h

#import <Foundation/Foundation.h>

@interface NSArray (Random)

- (id)randomObject;

@end
Run Code Online (Sandbox Code Playgroud)

NSArray的+ Random.m

#import "NSArray+Random.h"

@implementation NSArray (Random)

-(id)randomObject {
    NSUInteger myCount = [self count];
    if (myCount)
        return [self objectAtIndex:arc4random_uniform(myCount)];
    else
        return nil;
}

@end
Run Code Online (Sandbox Code Playgroud)

然后在当前示例中,您可以像这样使用它:

NSString *randomObject = [tips randomObject];
Run Code Online (Sandbox Code Playgroud)

使用类别还有另一个好处:当您决定改变在应用程序中选择随机对象的方式时,您只需修改randomObject方法即可.

  • +1因为我刚学会了arc4random_uniform.谢谢.是时候替换我所有的arc4randoms了 (7认同)