随机随机化一个NSMutableArray除了index0处的项目

时间:2014-05-03 22:08:09

标签: ios objective-c

有一个NSMutableArray,当我的用户按下按钮时,我希望数组中的所有项目随机改变位置,!!除了第一个!!。

现在我有

-(void)shufflemyList{

NSLog(@"Un Shuffled array : %@",myList);
NSMutableArray *array = [NSMutableArray arrayWithCapacity:0];
while ([myList count] > 0)
{
    int index = arc4random() % [myList count];
    id objectToMove = [myList objectAtIndex:index];
    [array addObject:objectToMove];
    [myList removeObjectAtIndex:index]; }

// test
NSLog(@"Shuffled array : %@",array);
myList=array;  }

这可以完全改变名单。 除了第一项外,有没有办法改组整个清单?

1 个答案:

答案 0 :(得分:0)

只需添加2行

-(void)shufflemyList{

NSLog(@"Un Shuffled array : %@",myList);
NSMutableArray *array = [NSMutableArray arrayWithCapacity:0];
// new code ---
[array addObject:myList[0]];
[myList removeObjectAtIndex:0];
// ---
while ([myList count] > 0)
{
    int index = arc4random() % [myList count];
    id objectToMove = [myList objectAtIndex:index];
    [array addObject:objectToMove];
    [myList removeObjectAtIndex:index]; }

// test
NSLog(@"Shuffled array : %@",array);
myList=array;  }

最好使用'arc4random_uniform(n)'而不是'arc4random()%n'。来自docs:

  

arc4random_uniform()将返回均匀分布的随机数   小于upper_bound。建议使用arc4random_uniform()   像``arc4random()%upper_bound''这样的结构,因为它避免了“模数”   偏见“当上限不是2的幂时。