Shuffle NSMutableArray objective-c

时间:2011-09-05 11:12:37

标签: objective-c random nsmutablearray shuffle

  

可能重复:
  What's the Best Way to Shuffle an NSMutableArray?
  Non repeating random numbers

如何获取NSMutableArray的随机索引而不重复? 我有NSMutableArray * audioList。我想以随机模式播放每首曲目,而不重复。如何以最好的方式做到这一点?

2 个答案:

答案 0 :(得分:5)

请参阅以下代码:

int length = 10; // int length = [yourArray count];
NSMutableArray *indexes = [[NSMutableArray alloc] initWithCapacity:length];
for (int i=0; i<10; i++) [indexes addObject:[NSNumber numberWithInt:i]];
NSMutableArray *shuffle = [[NSMutableArray alloc] initWithCapacity:length];
while ([indexes count])
{
    int index = rand()%[indexes count];
    [shuffle addObject:[indexes objectAtIndex:index]];
    [indexes removeObjectAtIndex:index];
}
[indexes release];
for (int i=0; i<[shuffle count]; i++)
    NSLog(@"%@", [shuffle objectAtIndex:i]);

现在在洗牌中你将拥有你的数组的索引而不重复。

希望,这会对你有所帮助

答案 1 :(得分:2)

Nekto的答案很棒,但我会改变两件事:

1)使用arc4random()代替使用rand(),以获得更不可预测的结果(更多细节here):

int index = arc4random() % [indexes count];

2)要输出“shuffle”的内容,请使用[myArray description](不需要使用for循环):

NSLog(@"shuffle array: %@", [shuffle description]);