如何随机化NSArray?

时间:2010-08-04 03:11:53

标签: objective-c sorting random nsarray

假设我有一个内部有50-100个对象的NSArray。如何以随机顺序放置数组?

2 个答案:

答案 0 :(得分:15)

有很多方法可以做到这一点,但大多数方法只涉及生成随机数。也许你可以使用NSMutableArray来使用这种技术:

  1. 生成0到49之间的随机数(假设50个元素)
  2. 交换元素0和您生成的任何数字
  3. 生成1到49之间的随机数
  4. 交换元素1和您生成的任何数字
  5. 这可能是最有效的方式。

    示例代码(未经测试):

    srandom(time(NULL));
    for (NSInteger x = 0; x < [array count]; x++) {
        NSInteger randInt = (random() % ([array count] - x)) + x;
        [array exchangeObjectAtIndex:x withObjectAtIndex:randInt];
    }
    

    此外,您可以使用两个NSMutableArray对象,只需在第一个具有对象时循环,随机选择一个,然后将其添加到另一个对象的末尾。现场方法可能更快。

答案 1 :(得分:-3)

NSArray *test = [NSArray arrayWithObjects:@"AA",@"BC",@"DE",@"EG",@"FA",@"GQ",@"DA"];<br>
NSSet *testset = [NSSet setWithArray:test];
NSArray *randomorder = [testset allObjects];
NSLog(@"random : %@",randomorder);<br><br>

显然没有NSSet的索引。因此,转换为NSSet并返回时,NSArray对象可能会混乱。这是一个黑客解决方案,但它有效(不确定)。