如何洗牌NSMutableArray不重复

可能重复:
什么是最好的方式来洗牌NSMutableArray?

在我的代码中,我想洗牌数组中的元素,并尝试打印出来,但它不是正确的洗牌,我尝试了这里显示。它的工作,但它的价值是重述。

for(UIView *view in self.view.subviews) { if([view isKindOfClass:[UIButton class]]) { button= (UIButton *)view; if (button.tag >=1 && button.tag <=20) { for (NSUInteger i = 0; i < count; ++i) { [texts rotate]; // Select a random element between i and end of array to swap with. int nElements = count - i; int n = (arc4random() % nElements) + i; [texts exchangeObjectAtIndex:i withObjectAtIndex:n]; //int myTag= j+1; //button = [self.view viewWithTag:myTag]; name=[NSString stringWithFormat:@"%@",[texts objectAtIndex:n]]; [button setTitle:name forState:UIControlStateNormal]; NSLog(@"current name :%@",name); } } } } 

洗牌后数组值重复,请帮我解决这个问题

试试这个int n = (arc4random() % count);
代替
int n = (arc4random() % nElements) + i;

确保你正在交换当前元素与texts任何元素,而不是总是inheritance它的元素。

只要使NSMutableArray的类别

 @implementation NSMutableArray (ArrayUtils) -(void)shuffle { static BOOL seeded = NO; if(!seeded) { seeded = YES; srandom(time(NULL)); } NSUInteger count = [self count]; for (NSUInteger i = 0; i < count; ++i) { // Select a random element between i and end of array to swap with. int nElements = count - i; int n = (random() % nElements) + i; [self exchangeObjectAtIndex:i withObjectAtIndex:n]; } 

}