object-c 随机数总结

解决几个典型的问题:

如何生成一个 Objective-C 的随机数?

使用arc4random()

具体而言,产生一个0-n-1之间的随机数,使用arc4random_uniform(),从而避免模偏差

NSUInteger r = arc4random_uniform(N);

0 到 1 之间的随机浮点数(double)

如果你要生成一个随机 double 或 float,另一个很好的选择是功能较模糊的 rand48 家族,包括 drand48(3)

   srand48(time(0));

    for (int i = 0; i < 10; i++) {

        double r = drand48();

        NSLog(@"%f[%d]", r, i);

    }

 

不像 arc4random 函数, rand48 函数在产生随机数之前需要种子的初始值。这个种子函数 srand48(time(0)) 应该只运行一次。

如何从一个 NSArray 选择一个随机元素?

NSArray *arr = @[@1, @2, @3, @5, @0];
    if ([arr count] > 0) {
        
        id obj = arr[arc4random_uniform((u_int32_t)[arr count])];
        NSLog( @"%@", obj);
    }

如何随机排序一个 NSArray

NSArray *arr = @[@1, @2, @3, @5, @0];
    NSMutableArray *a = [NSMutableArray arrayWithArray:arr];
    if ([arr count] > 1) {
        
        for (NSUInteger i = [arr count] - 1; i > 0; --i) {
            
            [a exchangeObjectAtIndex:i withObjectAtIndex:arc4random_uniform((u_int32_t)(i + 1))];
            
        }
    }
    NSLog(@"%@", a);

生成一个随机的小写 NSString

如果你是对一个已知的,连续范围的 Unicode 字符做处理,例如小写字母 (U+0061 — U+007A),你可以从 char 做一个简单的换算:

NSString *letter = [NSString stringWithFormat:@"%c", arc4random_uniform(26) + 'a'];

 

posted @ 2016-03-15 13:04  密西西里  阅读(928)  评论(0编辑  收藏  举报