@interface NSMutableArray (Shuffling)
// 随机打乱元素次序
- (void)shuffle;
@end
@implementation NSMutableArray (Shuffling)
- (void)shuffle
{
NSUInteger count = [self count];
for (NSUInteger i = 0; i < count; ++i)
{
NSInteger nElements = count - i;
NSInteger n = (arc4random() % nElements) + i;
[self exchangeObjectAtIndex:i withObjectAtIndex:n];
}
}
@end
这个算法的名字叫Fisher–Yates shuffle,
思路就是:
一: 0 和 0~n取的随机数 换
二: 1 和 1~n取的随机数 换
...
n: n 和 n 换