如何随机化NSArray?

Don*_*son 2 sorting random objective-c nsarray

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

Jus*_*kva 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];
}
Run Code Online (Sandbox Code Playgroud)

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

  • 使用arc4random()要好得多! (3认同)