有一个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; }
这可以完全改变名单。 除了第一项外,有没有办法改组整个清单?
答案 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的幂时。